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)]