Консолидация / сброс событий в окне подсчета - PullRequest
1 голос
/ 10 июля 2019

Я только начал использовать Flink и у меня возникла проблема, я не знаю, как ее решить. Я получаю события из темы Кафки, эти события представляют собой сигнал "маяка" от мобильного устройства. Устройство отправляет событие каждые 10 секунд.

У меня есть внешний клиент, который запрашивает маяк у наших устройств, но каждые 60 секунд. Поскольку мы уже используем Flink для обработки других событий, я подумал, что смогу решить эту проблему с помощью окна подсчета, но я пытаюсь понять, как «отбросить» первые 5 событий и создать только последнее. Есть идеи?

1 Ответ

1 голос
/ 11 июля 2019

Есть несколько способов сделать это. Насколько я понимаю, идея заключается в следующем: вы получаете сигнал маяка каждые 10 секунд, но на самом деле вам нужен только самый актуальный сигнал, а остальные игнорируются, поскольку клиент запрашивает данные каждые 60 секунд.

Самый простой вариант - использовать ProcessFunction с окном времени счета / события, как Вы сказали. Тип окна на самом деле зависит от ваших требований. Тогда Ты должен сделать что-то вроде этого:

stream.timeWindow([windowSize]).process(new CustomWindowProcessFunction())

Подпись метода process() для ProcessWindowFunction выглядит следующим образом, в зависимости от типа фактической функции def process(context: Context, elements: Iterable[IN], out: Collector[OUT]). Таким образом, в основном это дает вам доступ ко всем элементам окна, так что вы можете легко продвигать только те элементы, которые вам нравятся.

Хотя это самая простая идея, вы можете также взглянуть на таймеры Flink, так как они кажутся хорошим решением для вашей проблемы. Они описаны здесь .

...