Определить окно окончания сеанса времени события (Apache Flink Java) - PullRequest
0 голосов
/ 14 февраля 2020

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

1 Ответ

1 голос
/ 14 февраля 2020

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

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

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

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

...