好看的水印素材(适合做水印的英文)
数据乱序的产生
flink对数据进行流处理时,大部分情况下流到operator的数据都是按照事件产生的时间顺序来的。但是也不排除由于网络抖动、背压等原因,导致乱序的产生,所谓乱序,就是指Flink接收到的事件的先后顺序不是严格按照事件的Event Time顺序排列的。
如下图场景:
使用时间窗口来统计10分钟内的用户流量
时间窗口:2017-03-19 10:00:00-2017-03-19 10:10:00
数据59,因为网络延迟,其eventTime为2017-03-19 10:09:00,processingTime为2017-03-19 10:10:02。
此时,按照事件时间来计算,假设有另外一条数据(eventTime为2017-03-19 10:10:00)在2017-03-19 10:10:01时刻进入这个窗口,则会导致窗口关闭。因为59在2017-03-19 10:10:02才到达,因为属于59的窗口被提前关闭了,则59就会被遗漏,导致数据统计不准确。
事件时间窗口:按照进入数据的事件时间来判断是否关闭窗口,如果进来一条新数据是下一个窗口的数据,那么会关闭上一个窗口。使用水印解决乱序问题
1、水印(watermark)就是一个时间戳。
2、Flink可以给数据流添加水印,可以理解为:收到一条消息后,额外给这个消息添加了一个时间字段,这就是添加水印,一般人为添加的消息的水印都会比当前消息的事件时间晚一些。
3、窗口是否关闭按照水印时间来判断,但原有事件时间不会被修改,窗口的边界依旧是事件时间来决定。
(1)水印并不会影响原有Eventtime
(2)当数据流添加水印后,会按照水印时间来触发窗口计算
(3)一般会设置水印时间,比Eventtime晚一些(一般几秒钟)
(4)当接收到的水印时间