Можем ли мы объединить и счет, и обработать время запуска в 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: слайды, упражнение

Другие вопросы по тегам