如何在 Flink reduce计算过程中获取当前窗口之前的最后一个值



我正在使用 Flink 1.6 timeWindow。假设我有以下数据点:

时间戳、值

12:55:00, 10

13:05:00, 12

13:30:00, 14

13:59:00, 13

14:02:00, 17

现在,我的时间窗口是13:00(含(~14:00(不含(,如何获取最后一个值,即12:55:00,10,作为当前窗口计算的初始值?

谢谢。

从广义上讲,有两种方法可以解决这个问题:

  1. 某种自定义窗口
  2. 改用进程函数

鉴于窗口API的设计方式,在使用预聚合(即reduce或聚合(时,我看不到任何方法可以做到这一点,但我认为您可以使用ProcessWindowFunction和自定义Evictor做一些事情,或者利用ProcessWindowFunction.Context中的globalState来保持一个窗口和下一个窗口之间的状态。

您可能会遇到的一个问题是,例如,如果没有事件落入 13:00 ~ 14:00 的小时,则不会创建或评估任何窗口。如果这是一个问题,那么需要进一步的定制。

在涉及非标准窗口的大多数情况下,使用 ProcessFunction 更直接、性能更高。这样,您可以直接控制要保留的状态,并且窗口触发逻辑通常不难重新创建。

相关内容

最新更新