0

假设所有事件都准时到达并且不允许迟到,我该如何仅在会话窗口结束时进行一些处理?即水印已通过(lastEventInWindowTimestamp + inactivityGap)。发生这种情况时,我找不到任何调用的 API 方法。我可以使用自定义实现这个逻辑ProcessWindowFunction吗?

4

1 回答 1

1

是的,aProcessWindowFunction正是为了这个目的。当窗口完成时调用这样的函数,并传递(除其他外)一个包含已分配给窗口的流元素的 Iterable。在会话窗口的情况下,ProcessWindowFunction直到经过非活动期之后才会调用。

更新:如何报告每个会话窗口的开始和结束时间戳?

我将假设您可以从事件本身中提取每个事件的时间戳。然后,如果您使用 a ProcessWindowFunction,您可以遍历窗口中的事件并确定会话中事件的最小和最大时间戳——这些将是开始和结束时间戳。

另一方面,如果您更愿意使用增量计算窗口结果的 reduce 函数,则可以使用跟踪每个窗口的 (min, max) 时间戳的元组。

于 2020-02-14T13:03:03.867 回答