检测事件时间会话结束 window (Apache Flink Java)
Detect end of event time session window (Apache Flink Java)
假设所有事件都准时到达并且不允许迟到,我如何只在会话window结束时进行一些处理? IE。水印已通过 (lastEventInWindowTimestamp + inactivityGap
)。
我找不到发生这种情况时调用的任何 API 方法。我可以使用自定义 ProcessWindowFunction
实现此逻辑吗?
是的,ProcessWindowFunction
正是用于此目的。当 window 完成时调用这样的函数,并传递(除其他事项外)包含已分配给 window 的流元素的 Iterable。在会话 window 的情况下,ProcessWindowFunction
在不活动期结束后才会被调用。
更新:如何报告每个会话的开始和结束时间戳window?
我假设您可以从事件本身提取每个事件的时间戳。然后,如果您使用 ProcessWindowFunction
,您可以迭代 window 中的事件并确定会话中事件的最小和最大时间戳——这些将是开始和结束时间戳。
另一方面,如果您更愿意使用递减计算 window 结果的 reduce 函数,则可以使用跟踪每个 [=21= 的(最小,最大)时间戳的元组].
假设所有事件都准时到达并且不允许迟到,我如何只在会话window结束时进行一些处理? IE。水印已通过 (lastEventInWindowTimestamp + inactivityGap
)。
我找不到发生这种情况时调用的任何 API 方法。我可以使用自定义 ProcessWindowFunction
实现此逻辑吗?
是的,ProcessWindowFunction
正是用于此目的。当 window 完成时调用这样的函数,并传递(除其他事项外)包含已分配给 window 的流元素的 Iterable。在会话 window 的情况下,ProcessWindowFunction
在不活动期结束后才会被调用。
更新:如何报告每个会话的开始和结束时间戳window?
我假设您可以从事件本身提取每个事件的时间戳。然后,如果您使用 ProcessWindowFunction
,您可以迭代 window 中的事件并确定会话中事件的最小和最大时间戳——这些将是开始和结束时间戳。
另一方面,如果您更愿意使用递减计算 window 结果的 reduce 函数,则可以使用跟踪每个 [=21= 的(最小,最大)时间戳的元组].