开发者社区> 问答> 正文

如何通过现实时间控制事件时间的窗口?

我们现在以eventTime作为时间标准,每3秒做一次TumbleWindow,数据假设如下 

系统时间 

与上一条间隔 

事件时间 

与上一条间隔 

9:00:01 

9:00:01 

9:00:11  

10s 

9:00:02 

1s 

9:00:12 

1s 

9:00:12 

10s 

从事件时间上看,第一条和第二条数据是归集到同一窗口的。 

不过现在的处理需要在窗口有第一条数据后系统时间超时4s以上就强制关闭该窗口,即在系统时间9:00:05时关闭窗口,忽略掉第二条数据。 

请问这种情况需要怎么生成watermark? 

使用过 

WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(4L)) 

或者 

WatermarkStrategy.forMonotonousTimestamps().withIdleness(Duration.ofSeconds(4L)) 

结果都把第一条和第二条数据归集到同一个窗口中了, 

都没有达到预想的结果。 

要如何设置才能在窗口中仅有一条数据而忽略第二条数据?*来自志愿者整理的flink邮件归档

展开
收起
又出bug了-- 2021-12-02 11:48:43 503 0
1 条回答
写回答
取消 提交回答
  • 大概懂了,但还不够清晰。 

    因为tumble window中,如果是5s窗口,则是按照0-5,5-10,10-15这样的。不是基于第一条数据的。 

    如果你要按照第一条数据到达开始开窗,那就不要使用flink的window机制。 

    直接基于process function提供的底层功能,自己通过timeservice实现。 

    再或者如果需要使用window,则使用global 

    window,自己定义window的trigger触发机制即可(比如进来第一条数据,就设置定时器,定时器到了则触发窗口计算然后清理窗口状态)。*来自志愿者整理的FLINK邮件归档

    2021-12-02 14:34:13
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

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