[英]Detect end of event time session window (Apache Flink Java)
假设所有事件都准时到达并且不允许迟到,我如何仅在会话窗口结束时进行一些处理? 即水印已经通过( lastEventInWindowTimestamp + inactivityGap
)。 我找不到发生这种情况时调用的任何 API 方法。 我可以使用自定义ProcessWindowFunction
实现此逻辑吗?
是的, ProcessWindowFunction
正是为了这个目的。 当窗口完成时调用这样的函数,并传递(除其他外)一个包含已分配给窗口的流元素的 Iterable。 在会话窗口的情况下, ProcessWindowFunction
直到不活动期过后才会被调用。
更新:您如何报告每个会话窗口的开始和结束时间戳?
我假设您可以从事件本身中提取每个事件的时间戳。 然后,如果您使用ProcessWindowFunction
,您可以遍历窗口中的事件并确定会话中事件的最小和最大时间戳——这些将是开始和结束时间戳。
另一方面,如果您更愿意使用增量计算窗口结果的 reduce 函数,您可以使用跟踪每个窗口的(最小、最大)时间戳的元组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.