开发者社区> 问答> 正文

基于事件时间的滑动窗口,如何加速窗口的关闭

一个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邮件归档

展开
收起
雪哥哥 2021-12-07 16:14:20 539 0
1 条回答
写回答
取消 提交回答
  • 我理解你的问题是: 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

    2021-12-07 16:34:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载