代码设置:
//水位线允许乱序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窗口会关闭,无法消费迟到数据。