Flink关于事件时间窗口与第一项时间戳的混淆

时间:2019-07-16 13:36:56

标签: apache-flink flink-streaming

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

使用Flink中的基本窗口功能是否不可能?例如,如果我希望窗口长30秒,但是键的第一个项到达15秒,最后一个项到达40秒,则似乎该窗口将在30秒关闭,并且该键的记录轨迹将被分为两个窗口。在这种情况下,我想要的是窗口在事件发生时的15秒处开始并在45点关闭。

1 个答案:

答案 0 :(得分:2)

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

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