抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >


Flink 时间语义

Flink 的三种时间语义

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

link的三种时间语义

Process Time

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

特点

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

Event Time

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

特点

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

Ingestion Time

事件进入 Flink 的时间

在数据源操作处(进入 Flink source 时),每个事件将进入 Flink 时当时的时间作为时间戳

特点

  • 事件在进入数据源(Flink Source)时的时间作为时间戳
  • 介于 Event TimeProcessing Time 之间

Time 生成的位置

Time生成的位置

Time 的使用场景

一般来说在生产环境中使用 Processing TimeEvent Time 比较多,Ingestion Time 一般用的较少

Processing Time 使用场景

Processing Time 使用场景

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

Processing Time 的几种应用场景举例

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

Event 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 中的三种Window Flink 中的三种Window Flink Flink Flink 概述 Flink 概述 Flink常用的算子 Flink常用的算子 Flink 编程模型 Flink 编程模型 Flink实时处理Socket数据 Flink实时处理Socket数据

留言区

Are You A Robot?