检测事件结束时间会话窗口(apache flink java)

l7mqbcuq  于 2021-06-24  发布在  Flink
关注(0)|答案(1)|浏览(589)

假设所有事件都准时到达并且不允许迟到,那么如何仅在会话窗口结束时进行处理?i、 e.水印已通过( lastEventInWindowTimestamp + inactivityGap ). 我找不到发生这种情况时调用的任何api方法。我可以使用自定义 ProcessWindowFunction ?

fae0ux8s

fae0ux8s1#

是的,a ProcessWindowFunction 正是为了这个目的。这样的函数在窗口完成时被调用,并被传递(除其他外)一个iterable,其中包含分配给窗口的流元素。在会话窗口的情况下 ProcessWindowFunction 在非活动期结束后才调用。
更新:如何报告每个会话窗口的开始和结束时间戳?
我假设您可以从事件本身提取每个事件的时间戳。那么,如果你用的是 ProcessWindowFunction ,您可以迭代窗口中的事件,并确定会话中事件的最小和最大时间戳——这些将是开始和结束时间戳。
另一方面,如果您希望使用reduce函数递增地计算窗口结果,那么可以使用跟踪每个窗口的(min,max)时间戳的元组。

相关问题