MHuiG

「看庭前花开花落,望天上云卷云舒」

Time

# Flink 时间语义

## Flink 的三种时间语义

- `Processing Time`：事件被处理时机器的系统时间
- `Event Time`：事件自身的时间
- `Ingestion Time`：事件进入 Flink 的时间

### Process Time

事件处理时间 即事件被处理时机器的系统时间

#### 特点

- 最简单的 `Time` 概念
- 最好的性能和最低的延迟
- 分布式和异步环境下，不能提供确定性（不能保证结果数据的准确性）
- 容易受到事件到达系统的速度 (如消息队列)、事件在系统内操作流动的速度和中断的影响

### Event Time

事件自身的时间，一般就是数据本身携带的时间

#### 特点

- 数据本身携带，时间取决于数据
- 事件到达 `Flink` 之前就已经确定
- 必须指定如何生成 WaterMarks，用来表示 `Event Time` 进度的机制
- 无论事件什么时候到达或者其怎么排序，最后处理 `Event Time` 将产生完全一致和确定的结果

### Ingestion Time

事件进入 Flink 的时间

在数据源操作处（进入 Flink source 时），每个事件将进入 Flink 时当时的时间作为时间戳

特点

- 事件在进入数据源（Flink Source）时的时间作为时间戳
- 介于 `Event Time` 和 `Processing Time` 之间

## Time 生成的位置

## Flink Time 使用场景

### Time 的使用场景

一般来说在生产环境中使用 `Processing Time` 和 `Event Time` 比较多，`Ingestion Time` 一般用的较少

### Processing Time 使用场景

- 用户不关心事件时间，只关心这个时间窗口要有数据进来

#### Processing Time 的几种应用场景举例

- 淘宝双十一晚会大屏幕的下单总金额

### Event Time 使用场景

- 业务需求需要时间这个字段

#### Event Time 的几种应用场景举例

- 购物时先有下单事件、再有支付事件
- 机器异常检测出发的警告也需要具体的事件展示出来
- 商品广告及时精准推荐给用户依赖的就是用户在浏览器的时间段 / 频率 / 时长等信息

#### 处理延迟的数据

可能出现的情况影响事件到达不一定及时、乱序、延迟

- 网络抖动
- 服务可用性
- 消息队列的分区数据堆积

但是使用事件时间的话，就可能有这样的情况：数据源采集的数据往消息队列中发送时可能因为网络抖动、服务可用性、消息队列的分区数据堆积的影响而导致数据到达的不一定及时，可能会出现数据出现一定的乱序、延迟几分钟等，庆幸的是 Flink 支持通过 WaterMark 机制来处理这种延迟的数据

#### 如何设置 Time 策略？

    val env = StreamExecutionEnvironment.getExecutionEnvironment
    env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime)
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
    env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime)

Flink 编程模型

Programming Model Flink 编程模型 Apache Flink 是一个面向分布式数据流处理和批量数据处理的开源计算平台，提供支持流处理和批处理两种类型应用的功能 Fl...

Flink 中的三种Window

Window Flink 中的三种 Window Flink Window Demo 源码 GitHub 什么是 Window？统计经过某红绿灯的汽车数量之和？ 假设在一个红绿灯处，统...

推荐阅读
Flink 中的三种Window Flink Flink 概述 Flink常用的算子 Flink 编程模型 Flink实时处理Socket数据

留言区

Notes
Flink
本文目录
<pjax>
</pjax>
<pjax></pjax>
<pjax> Are You A Robot?</pjax>