李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
21.Flink中的时间语义
Leefs
2022-01-23 AM
1384℃
0条
[TOC] ### 前言 在流处理中,时间是一个非常核心的概念,是整个系统的基石。 我们经常会遇到这样的需求:给定一个时间窗口,比如一个小时,统计时间窗口内的数据指标。 那如何界定哪些数据将进入这个窗口呢? 在窗口的定义之前,首先需要确定一个作业使用什么样的时间语义。 本节将介绍Flink的Event Time、Processing Time和Ingestion Time三种时间语义。 ### 一、概念 在Flink的流式处理中,会涉及到时间的不同概念,如下图所示: ![21.Flink中的时间语义01.png](https://lilinchao.com/usr/uploads/2022/01/1004482093.png) **说明** 上图描述了用户或者上游系统产生事件,通过发送消息这样的方式,经由消息队列传输到flink集群里进行处理的过程。 **Event Time(事件时间)**:是事件创建的时间。 它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink 通过时间戳分配器访问事件时间戳。 由于事件从发生到进入Flink时间算子之间有很多环节,一个较早发生的事件因为延迟可能较晚到达,因此使用Event Time意味着事件到达有可能是乱序的。 **Ingestion Time(摄取时间)**:是事件到达Flink Source的时间。 从Source到下游各个算子中间可能有很多计算环节,任何一个算子的处理速度快慢可能影响到下游算子的Processing Time。而Ingestion Time定义的是数据流最早进入Flink的时间,因此不会被算子处理速度影响。 **Processing Time(处理时间)**:指算子使用当前机器的系统时钟时间,与机器相关,默认的时间属性就是Processing Time。 在Processing Time的时间窗口场景下,无论事件什么时候发生,只要该事件在某个时间段到达了某个算子,就会被归结到该窗口下,不需要Watermark机制。 ### 二、不同时间语义进行比较 + Event Time的优势是结果的可预测性,缺点是缓存较大,增加了延迟,且调试和定位问题更复杂; + Processing Time只依赖当前执行机器的系统时钟,不需要依赖Watermark,无需缓存。Processing Time是实现起来非常简单,也是延迟最小的一种时间语义;但是,在分布式和异步的环境下,Processing Time 不能提供确定性,因为它容易受到事件到达系统的速度(例如从消息队列)、事件在系统内操作流动的速度以及中断的影响。 + Ingestion Time通常是Event Time和Processing Time之间的一个折中方案; 比起Event Time,Ingestion Time可以不需要设置复杂的Watermark,因此也不需要太多缓存,延迟较低; 比起Processing Time,Ingestion Time的时间是Source赋值的,一个事件在整个处理过程从头至尾都使用这个时间,而且后续算子不受前序算子处理速度的影响,计算结果相对准确一些,但计算成本比Processing Time稍高。 ### 三、EventTime 的引入 **在Flink的流式处理中,绝大部分的业务都会使用eventTime**,一般只在eventTime无法使用时,才会被迫使用ProcessingTime或者 IngestionTime。 如果要使用 EventTime,那么需要引入EventTime的时间属性,引入方式如下所示: ```java val env = StreamExecutionEnvironment.getExecutionEnvironment // 从调用时刻开始给 env 创建的每一个 stream 追加时间特征 env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime) ``` *附参考文章链接:* *https://lulaoshi.info/flink/chapter-time-window/time*
标签:
Flink
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1865.html
上一篇
20. Flink增量聚合函数和全窗口函数示例
下一篇
22.Flink之Watermark基本概念
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Docker
Redis
Flume
哈希表
字符串
递归
并发线程
MyBatis-Plus
DataWarehouse
Java编程思想
FastDFS
BurpSuite
排序
人工智能
MyBatisX
FileBeat
SQL练习题
Golang
Hive
Java
Flink
JavaWeb
队列
CentOS
正则表达式
Hbase
散列
数据结构和算法
机器学习
微服务
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭