首页 > 解决方案 > Flink 关于与第一项时间戳相关的事件时间窗口的混淆

问题描述

我有一个包含数据和时间戳的记录日志,并且我的 Flink 应用程序按时间戳升序接收记录。在某个键的第一个项目到达窗口后,我想在 X 事件时间后关闭窗口并检查是否有足够的项目到达某个条件,并为该键发出通过或失败。

这对于 Flink 中的基本窗口函数是不可能的吗?例如,如果我希望我的窗口长 30 秒,但键的第一项到达 15 秒,最后一项到达 40 秒,那么窗口似乎将在 30 秒关闭,并且该键的记录轨迹将分为两个窗口。在这种情况下,我想要的是窗口在事件时间的 15 秒处开始并在 45 秒处关闭。

标签: apache-flinkflink-streaming

解决方案


以我的经验,这些用例在 a 中KeyedProcessFunction比使用自定义窗口更容易实现(内置窗口不能满足您的要求):

  • processElement您可以将元素缓冲到托管状态并在未来一段时间(30秒)注册一个计时器
  • onTimer您检查是否有足够的元素到达,评估您的状况并向下游发出。

推荐阅读