一个job,基于事件时间,窗口大小为60秒,滑动窗口10秒(每10秒更新过去60秒的数据), 水印5秒。
正常情况下, 整个流程最多延迟5秒即可看到计算后的结果。
但是我们的数据源会每10秒集中过来一批数据。
现在的问题是, 数据过来后, 窗口没法及时关闭, 而是要等下一个10秒的数据到来后, 才会触发窗口关闭。
这种场景下, 如何加速窗口关闭? 例如9:02:2x(wall clock)的时候, 收到9:02:10~9:02:19的数据, 但是, 到9:02:3x的时候收到9:02:2x的数据的时候, 才会关闭9:02:1x这个窗口期。
这时候计算结果会延迟10秒+。
如何加速这个窗口的关闭呢? 如果想在收到的最后一条数据的时间戳+watermark之后就关闭窗口, 如何设置?*来自志愿者整理的flink邮件归档
我理解你的问题是: 1. source 数据不连续,10秒一个 batch 2. 而你用的又是 event time,event time 依赖数据提供的时间 3. 没数据来的这个间隙,event time 无法更新,没有 watermark 发下去,也就导致 window 不能关闭
我能想到的几个方面 1. 你真的需要 event time 吗?如果用 processing time 就没这问题 2. 10秒一个 batch 的数据源,可以优化吗?如果是连续输入,也就没有这问题了 3. 语义上来说,你的下一批数据不到,Flink 也没办法发送 watermark,因为不知道会不会来更早的数据,这个是你使用的模型决定的。Flink 提供了一套机制来解决类似问题,不过不确定你的 source 是否能支持,可以参考下. [1]
1. https://ci.apache.org/projects/flink/flink-docs-master/dev/event_time.html#idling-sources*来自志愿者整理的flink
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。