Flink 时间概念与 WaterMark
Flink中的时间分为三种
事件时间:Event Time
接入时间:Ingestion Time
处理时间:Processing Time
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v5oglSmm-1591153494979)(http://cdn.rabbitai.cn/flink/flink_time/01.png)]
时间指定语法:
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
水位线机制是为了保证数据全部达到后再做处理
Watermark 的功能在于保证基于event_time 的窗口在销毁时,已经处理完了所以的数据。WaterMark 会携带一个单调递增的时间戳 t ,watermark(t) 表示所有时间戳不大于t的数据都已经到来了,未来小于等于t的数据不会再来,因此可以放心地触发和销毁窗口了。
Flink中使用最新的事件时间减去固定的时间长度(参数)作为Watermark, 保障窗口中数据的完备性,是由使用者的业务特性所确定的经验值。如果到达Watermark之后,仍有Watermark之下的数据,则认为是迟到的或者异常的数据,不会进入窗口的计算流程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hg9xXCqa-1591153494983)(http://cdn.rabbitai.cn/flink/flink_time/02.png)]
如上图所示,在乱序到达的情况下,该案例中,容忍两个时间单位长度。即:
对应wartermark-8 来说,在遇到事件时间为10的事件时,就获得了水位线时间。
对应

本文详细介绍了Flink中的三种时间概念——事件时间、接入时间和处理时间,并重点讲解了WaterMark机制,包括其在确保数据完备性中的作用、生成方式(按时间周期和按数量)以及如何处理迟到数据。同时提到了allowedLateness参数对处理迟到数据的影响。
最低0.47元/天 解锁文章
1604

被折叠的 条评论
为什么被折叠?



