Flink 的 Time 三兄弟
前言
本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系
正文
在专栏前面我们已经介绍过
可以通过window窗口来统计每一段时间或者每多少条数据的一些数值统计。
请参考我的这篇博客——一篇文章搞懂 Flink 的 Window
但是也存在另外一个问题,就是如果数据有延迟该如何解决,例如一个窗口定义的是每隔五分钟统计一次,我们应该在上午九点至九点零五分这段时间统计一次数据的结果值,但是由于某一条数据由于网络延迟,数据产生时间是在九点零三分,数据到达我们的flink框架已经是在十点零三分了,这种问题怎么解决?
再例如:
原始日志如下:
日志自带时间
2020-10-10 10:00:01,134 INFO executor.Executor: Finished task in state 0.0
数据进入flink框架时间:
这条数据进入Flink的时间是2020-10-10 20:00:00,102
数据被window窗口处理时间:
到达window处理的时间为2020-10-10 20:00:01,100
Time 三兄弟是什么?
为了解决这个问题,flink在实时处理当中,对数据当中的时间规划为以下三个类型
针对stream数据中的时间,可以分为以下三种
Event Time:事件产生的时间,它通常由事件中的时间戳描述。
Ingestion time:事件进入Flink的时间
Processing Time:事件被处理时当前系统的时间
可以参考我的这篇博客——什么是事件时间和处理时间?
1、EventTime详解
- 事件生成时的时间,在进入Flink之前就已经存在,可以从event的字段中抽取。
- 必须指定watermarks(水位线)的生成方式。
- 优势:确定性,乱序、延时、或者数据重放等情况,都能给出正确的结果
- 弱点:处理无序事件时性能和延迟受到影响
2、IngestTime
- 事件进入flink的时间,即在source里获取的当前系统的时间,后续操作统一使用该时间。
- 不需要指定watermarks的生成方式(自动生成)
- 弱点:不能处理无序事件和延迟数据
3、ProcessingTime
- 执行操作的机器的当前系统时间(每个算子都不一样)
- 不需要流和机器之间的协调
- 优势:最佳的性能和最低的延迟
- 弱点:不确定性 ,容易受到各种因素影响(event产生的速度、到达flink的速度、在算子之间传输速度等),压根就不管顺序和延迟
4、三种时间的综合比较
性能: ProcessingTime> IngestTime> EventTime
延迟: ProcessingTime< IngestTime< EventTime
确定性: EventTime> IngestTime> ProcessingTime
5、如何设置time类型
在我们创建StreamExecutionEnvironment的时候可以设置time类型,不设置time类型,默认是processingTime,如果设置time类型为eventTime,那么必须要在我们的source之后明确指定Timestamp Assigner & Watermark Generator
// 设置时间特性
val environment: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
// 不设置Time 类型,默认是processingTime。
// 如果使用EventTime则需要在source之后明确指定Timestamp Assigner & Watermark Generator
environment.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime)
Flink 的 Time 三兄弟相关推荐
- 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript
设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...
- 【拔刀吧少年】之循环三兄弟for while until
循环三兄弟 一.echo命令 – 输出字符串或提取Shell变量的值 1.格式 2.常用参数 3.常用的转义字符 二.循环语句 1.for循环结构 2.while循环语句结构(迭代) 3.until ...
- 孪生三兄弟 CycleGAN, DiscoGAN, DualGAN
孪生三兄弟 CycleGAN, DiscoGAN, DualGAN 2017-05-11 11:43 GAN 提出两年多来,很多想法都被研究者们提出.探索并实践.直到最近近乎同一时期发布的三篇论文,C ...
- 5G三兄弟NB-IoT排老几?NB-IoT介绍
5G 作为一个大家长,家里有三兄弟:LTE(授权频道).LTE-U(非授权频道).NB-IOT(授权频道).就像是最近爆火的揭露现实中国家庭的电视剧<都挺好>中,苏家的三兄弟一样.作为 5 ...
- 设计模式-创建型模式-工厂模式(工厂三兄弟)
设计模式-创建型模式-工厂模式(工厂三兄弟) 工厂模式分为简单工厂,工厂方法,抽象工厂. 简单工厂模式 一个接口,三个具体类,一个工厂,通过选择,生产出对应的对象. package demo2;pub ...
- 【华为云技术分享】云图说|超赞!终于有人把云存储“三兄弟”讲清楚了!
云硬盘EVS是为云服务器提供高可靠.高性能.规格丰富并且可弹性扩展的块存储服务. 对象存储服务OBS具备提供海量.安全.高可靠.低成本的数据存储能力,可供用户存储任意类型和大小的数据. 弹性文件服务S ...
- JAVA中用于处理字符串的 三兄弟
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! JAVA ...
- 人眼分辨 PPI_扒一扒,PPI、LPI、DPI分辨率三兄弟~
今天我们来扒一扒这三个长得很像很像的分辨率三兄弟:PPI.DPI.LPI. 不急,沏一杯茶,咱慢慢侃~ 这三个后面的PI都是一个意思:per inch(每英寸). 所以这三个概念都是表明图像精细度的, ...
- 瑞格科技IPO被终止:曾拟募资5.6亿 江振翔三兄弟为实控人
雷递网 雷建平 12月17日 浙江瑞格智能科技股份有限公司(简称:"瑞格科技")日前IPO被终止. 瑞格科技计划募资5.59亿元,其中,2.55亿元用于年产1000万套汽车配件技改 ...
- mt6592android7,0.3GHz究竟差多少 MT6592三兄弟实测解析
如果说红米手机的出现打响了千元手机"战争"的第一炮,那么如今炙手可热的千元八核机型无疑可以看做是千元机之争的"第二弹",随着各个厂商推出千元八核机型,整个&qu ...
最新文章
- C++核心编程(三)
- windows 7 下安装 Android 设备驱动
- vue-socket.io跨域问题的解决方法
- Tomcat8.0之源代码初体验
- Spring MVC使用拦截器实现权限控制
- python set union_python – set.union()抱怨它在传入生成器时没有参数
- JavaFX 中的像素、分辨率与缩放比
- 2021盐城中考有计算机考试吗,2021盐城中考总分满分是多少?各科目分值设置
- Linux学习笔记020---CentOs7.3 搭建 Solr单机服务
- Mac安装Redis
- Strategy模式的一点思考
- 百科知识:VTP(思科)
- InnoDB Undo Log
- 是什么的简称_全国各地区车牌号简称,说说你们那的车牌是什么?
- c语言与或非异或符号怎么打,逻辑运算符的符号
- 12-ubuntu:010 Editor
- php短信接口开发(http协议)
- android 磁盘读写速度,手机微硬盘读取速度50MB/s eMMC技术浅析
- 【数学建模】主成因分析
- 微信h5互动小游戏制作心得
热门文章
- (十五)使用任务通知实现命令行解释器
- 大数据解决方案:Hadoop监控
- 计算机无法找到网络打印机,为何搜索不到局域网打印机_解决win7找不到网络打印机的问题...
- hiveql 没有left()right()函数,可用substr()替代
- 基于粒子群算法和遗传算法优化的高速列车横向悬挂模糊PID控制
- python爬取头条付费专栏视频_用Python编写爬取头条视频的代码
- 网络基础之路由器的应用原理
- poj2706 connect
- mongoDb一对多之springboot demo
- 【JSP笔记02】JSP注释、脚本、表达式、JSP三大指令、JSP七大动作的介绍及使用