java - 检测事件时间 session 窗口的结束 (Apache Flink Java)

标签 java apache-flink streaming-analytics

假设所有事件均按时到达且不允许迟到,如何仅在 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/

相关文章:

java - 未获取通过 RestTemplate.getForObject 传递的 header

hadoop - 为什么有人会在 Tez 上运行 Spark/Flink?

bigdata - Apache Flink是如何实现迭代的?

apache-flink - Flink 到 Nifi 的 Magic Header 不存在

java - Struts拦截器的确切含义

java - 使用 Tycho 构建片段时出错 : "xyz.fragment cannot be installed in this environment because its filter is not applicable"

Java HashSet 实现设计

google-cloud-dataflow - 是否可以使用 Apache Beam/Google Cloud Dataflow 从 Azure EventHub 主题进行消费?

apache-kafka - 如何编写查询来提取 KSQL 中的所有字段值以及满足条件的值