如何在flink reduce计算中得到当前窗口前的最后一个值

oipij1gg  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(479)

我用的是flink 1.6时间窗。假设我有以下数据点:
时间戳,值
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,作为当前窗口计算的初始值?
谢谢。

eqqqjvef

eqqqjvef1#

一般来说,有两种方法可以实现这一点:
某种自定义窗口
改用processfunction
考虑到windowapi的设计方式,在使用预聚合(即reduce或aggregate)时,我看不到任何方法可以实现这一点,但我认为可以使用processwindowfunction和自定义逐出器,或者利用processwindowfunction.context中的globalstate在一个窗口和下一个窗口之间保持状态。
您可能遇到的一个问题是,例如,如果在13:00~14:00这一小时内没有发生任何事件,则不会创建或计算任何窗口。如果这是一个问题,那么需要进一步定制。
在大多数涉及非标准窗口的情况下,使用processfunction更直接、更高效。这样,您就可以直接控制要保持的状态,而窗口触发逻辑通常不太难重新创建。

相关问题