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