我正在使用Flink 1.6 timeWindow。假设我有以下数据点:
时间戳,价值
12:55:00,10
13:05:00,12
13:30,14
13:59:00,13
14:02:00,17
现在,我的时间窗口是13:00~14:00,如何获取最后一个值,即12:55:00,作为当前窗口计算的初始值?
从广义上讲,有两种方法可以解决这个问题:
某种自定义窗口
请改用ProcessFunction
鉴于窗口API的设计方式,我没有看到任何方法在使用预聚合(即,缩减或聚合)时实现此目的,但我认为您可以使用ProcessWindowFunction和自定义Evictor执行某些操作,或者通过利用ProcessWindowFunction.Context中的globalState来保持一个窗口和下一个窗口之间的状态。
您可能遇到的一个问题是,如果没有事件落入13:00~14:00的小时,那么将不会创建或评估任何窗口。如果这是一个问题,那么需要进一步定制。
在大多数涉及非标准窗口的情况下,使用ProcessFunction更简单,更高效。这样,您可以直接控制要保留的状态,并且窗口触发逻辑通常不是很难重新创建。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。