Можем ли мы объединить и счет, и обработать время запуска в Flink?
Я хочу завершить работу Windows после того, как счет достиг 100 или каждые 5 секунд в течение времени переворачивания? То есть когда элементы достигают 100, запускаются вычисления Windows, однако, если элементы не повторяют 100, а время истекло 5 секунд, это также запускает вычисления Windows, так же как комбинация из двух нижеприведенных триггеров:
.countWindow (100)
.window (TumblingProcessingTimeWindows.of (Time.seconds (5)))
1 ответ
Там нет супер простой способ сделать это с текущим Flink API.
Ваш вариант использования нуждается в комбинации состояния (для подсчета) и таймера. Это можно сделать либо с помощью окон с помощью пользовательского триггера, либо с помощью функции ProcessFunction.
Для подхода с окнами плюс пользовательский триггер полезно будет рассмотреть реализации ProcessingTimeTrigger и CountTrigger, так как вы в основном хотите смешать их.
ProcessFunction - это низкоуровневый строительный блок, который объединяет управляемое состояние с таймерами, что именно то, что вам нужно, так что это, вероятно, проще, особенно если вы уже знаете, как работать с управляемым состоянием Flink.
Кстати, интерактивные учебные материалы по Flink включают слайды и упражнения для реализации пользовательских триггеров и использования ProcessFunction.
Триггеры: слайды, упражнения
ProcessFunction: слайды, упражнение