Есть несколько способов сделать это. Насколько я понимаю, идея заключается в следующем: вы получаете сигнал маяка каждые 10 секунд, но на самом деле вам нужен только самый актуальный сигнал, а остальные игнорируются, поскольку клиент запрашивает данные каждые 60 секунд.
Самый простой вариант - использовать ProcessFunction
с окном времени счета / события, как Вы сказали. Тип окна на самом деле зависит от ваших требований. Тогда Ты должен сделать что-то вроде этого:
stream.timeWindow([windowSize]).process(new CustomWindowProcessFunction())
Подпись метода process()
для ProcessWindowFunction
выглядит следующим образом, в зависимости от типа фактической функции def process(context: Context, elements: Iterable[IN], out: Collector[OUT])
. Таким образом, в основном это дает вам доступ ко всем элементам окна, так что вы можете легко продвигать только те элементы, которые вам нравятся.
Хотя это самая простая идея, вы можете также взглянуть на таймеры Flink, так как они кажутся хорошим решением для вашей проблемы. Они описаны здесь .