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？统计经过某红绿灯的汽车数量之和？ 假设在一个红绿灯处，统...

留言区

Notes
Flink
本文目录
Are You A Robot?