Flink窗口时间与触发和Watermaker之间的关系

        前几天有个同事一直说Flink在计算窗口中的数据时老有问题然后问我,甚至把CSDN或者B站上某些北京的培训机构所讲的视频给我看,让我看了实践后帮助他辨别一下,是他理解有误还是某些培训机构的老师压根就是误人子弟呢?当我看到有一家培训机构的老师讲关于Flink的watermark的计算时,我嘚一下就蒙了,一度怀疑我自己的技术体系有错误了,具体是那家我就不说了。

我这里大约用三张图说明,一张是我自己预判的计算过程和结果图,剩下的两张是测试实验图:

·水位线时间戳 = 进入Flink时数据流中事件时间最大的mxtEventTime  - 指定的延迟时间;比如刚开始是0 ,现在1进入那么1就最大,4再进入那么4就最大,3再进入时4依旧最大
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
· 根据Flink源码中的计算公式得出窗口的起始时间和结束时间(这个算法在滚动窗口和滑动窗口全部适用):
1646958553377(第一个事件的eventtime) + 10000(窗口大小)
= 1646958543377
1646958543377 % 10000(窗口大小)
=3377(余数)
1646958553377(第一个事件的eventtime) - 3377
=1646958550000(Flink自己算出的窗口的起始时间)
=1646958560000(Flink自己算出的窗口的结束时间)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
· 计算滚动窗口触发窗口时机的时间戳:1646958560000(Flink自己算出的窗口的结束时间)= 1646958560000(触发时机时间戳)
· 滚动窗口触发时机为:1646958560000(触发时机时间戳) <= 水位线时间戳
· 滚动窗口结果预判:当水位线的时间戳大于等于1646958560000时window窗口开始计算(经过测试真实的结果和预判的结果一致)。
· 滚动窗口window窗口触发后开始计算时只会计算1646958550000-1646958560000内的数据。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
·如果是滑动窗口触发的时机应该是:根据第一个事件的eventTime让Flink自己算出的窗口的结束时间(算法同上) - 滑动时间  <= 水位线时间戳时即可触发窗口。即:
1646958560000 - 5000 = 1646958555000 <=  水位线时间戳即可触发。
· 滑动窗口window窗口触发后开始计算时只会计算1646958545000-1646958555000内的数据。
·---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
·以下是一些数据,延迟3秒:
base-03,19911013306,18973174061,success,1646958553377,800      水位线W(1646958550377)
base-03,19911013306,18973174061,success,1646958557377,800      w(1646958554377)
base-03,19911013306,18973174061,success,1646958555377,800      w(1646958554377)  
base-03,19911013306,18973174061,success,1646958558377,800      w(1646958555377)  
base-03,19911013306,18973174061,success,1646958560377,800      w(1646958557377)
base-03,19911013306,18973174061,success,1646958561377,800      w(1646958558377)
base-03,19911013306,18973174061,success,1646958564377,800      w(1646958561377)
base-03,19911013306,18973174061,success,1646958566377,800      w(1646958563377) >= 1646958563000(滚动窗口触发时机的时间戳)
触发窗口开始计算了。

滚动窗口测试结果:

 滑动窗口测试结果:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值