在Flink减少计算期间如何获取当前Window之前的最后一个值

时间:2018-09-22 23:09:07

标签: apache-flink

我正在使用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)作为当前Window计算的初始值? / p>

谢谢。

1 个答案:

答案 0 :(得分:0)

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

  1. 某种自定义窗口
  2. 改为使用ProcessFunction

考虑到窗口API的设计方式,在使用预聚合(即减少或聚合)时,我看不到任何实现此目的的方法,但是我认为您可以使用ProcessWindowFunction和自定义Evictor来做一些事情,或者利用ProcessWindowFunction.Context中的globalState来保持一个窗口与下一个窗口之间的状态。

您可能会遇到的一个问题是,例如,如果在13:00到14:00之间没有事件发生,那么将不会创建或评估任何窗口。如果有问题,则需要进一步的自定义。

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