假设所有事件均按时到达且不允许迟到,如何仅在 session 窗口结束时进行一些处理? IE。水印已过 (lastEventInWindowTimestamp + inactivityGap
)。
我找不到发生这种情况时调用的任何 API 方法。我可以使用自定义 ProcessWindowFunction
实现此逻辑吗?
最佳答案
是的,ProcessWindowFunction
正是用于此目的。当窗口完成时调用这样的函数,并传递(除其他外)一个包含已分配给窗口的流元素的 Iterable。对于 session 窗口,ProcessWindowFunction
直到非 Activity 期结束后才会被调用。
更新:如何报告每个 session 窗口的开始和结束时间戳?
我假设您可以从事件本身中提取每个事件的时间戳。然后,如果您使用 ProcessWindowFunction,您可以迭代窗口中的事件并确定 session 中事件的最小和最大时间戳 - 这些将是开始和结束时间戳。
另一方面,如果您更愿意使用减少函数来增量计算窗口结果,则可以使用跟踪每个窗口的(最小、最大)时间戳的元组。
关于java - 检测事件时间 session 窗口的结束 (Apache Flink Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60225165/