假设所有事件都准时到达并且不允许迟到,我该如何仅在会话窗口结束时进行一些处理?即水印已通过(lastEventInWindowTimestamp + inactivityGap
)。发生这种情况时,我找不到任何调用的 API 方法。我可以使用自定义实现这个逻辑ProcessWindowFunction
吗?
问问题
550 次
1 回答
1
是的,aProcessWindowFunction
正是为了这个目的。当窗口完成时调用这样的函数,并传递(除其他外)一个包含已分配给窗口的流元素的 Iterable。在会话窗口的情况下,ProcessWindowFunction
直到经过非活动期之后才会调用。
更新:如何报告每个会话窗口的开始和结束时间戳?
我将假设您可以从事件本身中提取每个事件的时间戳。然后,如果您使用 a ProcessWindowFunction
,您可以遍历窗口中的事件并确定会话中事件的最小和最大时间戳——这些将是开始和结束时间戳。
另一方面,如果您更愿意使用增量计算窗口结果的 reduce 函数,则可以使用跟踪每个窗口的 (min, max) 时间戳的元组。
于 2020-02-14T13:03:03.867 回答