Flink三种时间语义
(1)Event Time:事件发生的时间。
(2)Processing Time:事件处理的事件,没有事件时间的情况下,或者对实时性要求超高的情况下。
(3)Ingestion Time:事件进入Flink的时间,存在多个 Source Operator 的情况下,每个 Source Operator可以使用自己本地系统时钟指派 Ingestion Time。后续基于时间相关的各种操作,都会使用数据记录中的 Ingestion Time。
Event Time
事件发生的时间,这是实际应用最常见的时间语义,也是最常用的。往往是数据自身带的时间
特点:
- 数据本身携带,时间取决于数据
- 事件到达Flink之前就已经确定
- 必须指定如何生成WaterMarks,用来表示Event Time进度的机制
- 无论事件什么时候到达或者其怎么排序,最后处理 Event Time 将产生完全一致和确定的结果
Processing Time
事件处理时间 即事件被处理时机器的系统时间
特点:
- 最简单的 Time 概念
- 最好的性能和最低的延迟
- 分布式和异步环境下,不能提供确定性(不能保证结果数据的准确性)
- 容易受到事件到达系统的速度(如消息队列)、事件在系统内操作流动的速度和中断的影响
Ingestion Time
在数据源操作处(进入 Flink source 时),每个事件将进入 Flink 时当时的时间作为时间戳
特点:
- 事件在进入数据源(Flink Source)时的时间作为时间戳()
- 介于Event Time 和 Processing Time 之间