Flink水位线乱序加窗口延迟关闭时,窗口计算关闭规则

 代码设置:

//水位线允许乱序2S
Stream.assignTimestampsAndWatermarks(WatermarkStrategy<~>forBoundedOutOfOrderness(Duration.ofSeconds(2));
//窗口时间10S,窗口延迟关闭3S
Stream.window(TumblingEventTimeWindows.of(Time.seconds(10))).allowedLateness(Time.seconds(3));

单独分析作用:

水位线允许乱序2:当水位线到达8的时候,会默认减去2,实际水位线为6

窗口延迟关闭3:当窗口到达10关闭时间后不会关闭,水位线到达13时触发关闭


两项同时作用时:

数据10到来,因为水位线乱序,所以此时实际水位线为10-2=8,相当于水位线数据到达了8

数据12到来,则水位线到达12-2=10,触发窗口计算输出,但此时水位线未到达13,窗口未关闭,这时迟到数据(以8为例)到来,因为数据值小于水位线(8-2<10),此时数据会放到0~10窗口,可以消费到迟到数据

当数据15到来,则水位线到达15-2=13,触发了窗口关闭,此时0~10窗口会关闭,无法消费迟到数据。

注意:0~10窗口,只会收集  [0 10)数据,后面12,15秒数据依旧会收集到  [10  , 20)窗口

 


 思考:

 如果 watermark等待2s,窗口允许迟到5s, 为什么不直接 watermark等待5s 或者 窗口允许迟到5s?

  =》 watermark等待时间不会设太大 ===》 影响的计算延迟

          如果2s ==》 窗口第一次触发计算和输出,  12s的数据来 。  12-2=10s

          如果5s ==》 窗口第一次触发计算和输出,  15s的数据来 。  15-5=10s

  =》 窗口允许迟到,是对大部分迟到数据的处理, 尽量让结果准确

          如果只设置允许迟到5s, 那么 就会导致 频繁 重新输出


 设置说明:

  1、watermark等待时间,设置一个不算特别大的,一般是秒级,在 乱序和 延迟 取舍

  2、设置一定的窗口允许迟到,只考虑大部分的迟到数据,极端小部分迟到很久的数据不管

  3、极端小部分迟到很久的数据, 放到侧输出流。 获取到之后可以做各种处理

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值