flink1.12.x Event Time事件时间的重要性、数据乱序、WaterMarker

事件时间案例

下订单时断网

在 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 机制