Обнаружить конец окна сеанса времени события (Apache Flink Java)

Предполагая, что все события прибывают вовремя и не допускаются задержки, как мне выполнить некоторую обработку только после того, как окно сеанса закончилось? Т.е. водяной знак прошел (lastEventInWindowTimestamp + inactivityGap). Я не смог найти ни одного метода API, который вызывается, когда это происходит. Могу ли я реализовать эту логику с помощью специальногоProcessWindowFunction?

1 ответ

Решение

Да ProcessWindowFunctionслужит именно этой цели. Такая функция вызывается, когда окно завершается, и ей передается (среди прочего) Iterable, содержащий элементы потока, которые были назначены окну. В случае окна сеансаProcessWindowFunction не вызывается до тех пор, пока не истечет период бездействия.

Обновление: как вы можете сообщать о времени начала и окончания каждого окна сеанса?

Я предполагаю, что вы можете извлечь метку времени для каждого события из самого события. Затем, если вы используетеProcessWindowFunction, вы можете перебирать события в окне и определять минимальные и максимальные временные метки для событий в сеансе - это будут временные метки начала и окончания.

Если, с другой стороны, вы предпочитаете использовать функцию сокращения, которая постепенно вычисляет результаты окна, вы можете работать с кортежами, которые отслеживают (минимальные, максимальные) временные метки для каждого окна.

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