码迷,mamicode.com
首页 > Windows程序 > 详细

flink的watermark和window介绍以及延迟数据的处理

时间:2019-12-24 18:35:47      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:假设   第一条   重叠   count   导致   乱序   产生   style   latest   

一:WaterMark

本质:时间戳

作用:用于处理乱序事件

适用场景:基于事件时间做窗口运算

产生频率:默认是来一条数据下发一次watermark,但是可以调整setAutoWatermarkInterval参数设置下发watermark的时间间隔,性能会有一定的提升。

多并发的情况下,取wateramark最小的一个,例如:p1-> 12,p2->14,p3->8,则watermark取最小的8

获取watermark的位置:最好紧跟着source

技术图片

 

 

 

 

说明:source端假设有两个并发,并发1的wateramark是33,并发2的watermark是88,那么source的watermark就取最小的那个33,但是如果在map之后获取watermark,由于是并发的,多个并发之间的数据没有顺序,可能来的数据的wateramark是50,但是很多数据产生的watermark都小于50,这样就会导致数据大量丢失,所以watermark的获取最好紧跟着source。

二:Window

2.1 类型汇总

技术图片

窗口分为三种,timewindow、countwindow和自定义的window。timewindow还分为滚动窗口,滑动窗口和会话窗口,图中没有画出,比较常用的是滚动窗口。

2.2  滚动窗口

技术图片

窗口大小是人为设置的,一条事件同时只能在一个窗口中,窗口之间不重叠。

2.3 滑动窗口

技术图片

 

 

窗口大小是人为设置的,滑动的大小也是人为设置的,一条事件可能同时存在于多个窗口中,窗口之间可重叠。

 

2.4 会话窗口

 

技术图片

 

 

 窗口没有固定的开始和结束时间,窗口不重叠。

三:Window和watermark的结合处理数据乱序问题

 

 

 

技术图片

技术图片

 这里面有两个时间概念:生成watermark的时候,允许乱序的时间和allowedLatest。

通过运行结果可以看出:第一条数据进来的时候,生成一个窗口为[15,20),第二条数据进来的时候同样属于第一个窗口,当第三条数据进来的时候,产生的watermark大于第一个窗口的结束时间,所以第一个窗口触发计算,产生结果,当第四条数据进来的时候,由于第一个窗口还没有销毁并且属于第一个窗口,所以可以再次触发窗口运算,第一个窗口的销毁时间为2019-05-30 17:12:22,也就是当watermark的时间大于这个值的时候,再来属于该窗口的数据就属于延迟数据,不能触发运算,之后进来的数据依旧是如此。

flink的watermark和window介绍以及延迟数据的处理

标签:假设   第一条   重叠   count   导致   乱序   产生   style   latest   

原文地址:https://www.cnblogs.com/lyr999736/p/12092780.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!