事件时间案例
下订单时断网
在 2021-1-1 23:59 下订单,但突然断网。——- Event Time
在 2021-1-2 00:01 恢复网络,下订单成功
在 2021-1-2 00:05 该数据进入 flink。—— Ingestion Time
在 2021-1-2 00:02 flink开始统计 2021-1-1 的订单。—— Processing Time
也就是说:
虽然下订单 事件时间 是:2021-1-1 23:59,
但 该数据进入 flink 的时间是 2021-1-2 00:05
而在 2021-1-2 00:02 就开始 统计 2021-1-1 的订单,导致该数据没有统计上
即:丢失数据
事件时间的重要性
事件时间能够真正 反映 事件的本质,所以,一般开发中,以事件时间作为计算基准
统计时遇到的时间问题
统计 2021-1-1 的订单,是否应该统计 该订单
应该被统计,因为该事件真正发生的时间是:2021-1-1 23:59
乱序数据
案例
比如 抢红包、双11抢购时,
李雷操作时间:2021-1-1 18:00:00
韩梅梅操作时间:2021-1-1 18:00:05
但由于 李雷 的 网络不稳定,发生延迟,数据比韩梅梅晚到
乱序数据带来的问题
在开发中,想基于 事件时间 处理数据,但由于网络不稳定、分布式等原因,会导致乱序数据的产生,乱序数据会让窗口计算不准确
解决
我们希望基于 事件时间 处理数据,但因为 网络不稳定 等原因,出现了 延迟到达、乱序 ,甚至 丢失数据
为了解决这些问题,提出 WaterMarker 机制