Flink - [05] 时间语义 & Watermark
题记部分
一、时间语义
Flink中的时间语义分为以下,
(1)Event Time:事件创建的时间
(2)Ingestion Time:数据进入Flink的时间
(3)Processing Time:执行操作算子的本地系统事件,与机器相关
哪种时间语义更重要?
- 不同的时间语义有不同的应用场合,我们往往更关心事件时间(Event Time)
- 某些场合,不应该使用Processing Time
- Event Time可以从日志数据的时间戳(timestamp)中提取
2017-11-02 18:37:15.624 INFO Fail over to rm
1.1、设置Event Time
可以直接在代码中,对执行环境调用setStreamTimeCharacteristic方法,设置流的时间特性
具体的时间,还需要从数据中提取时间戳(timestamp)
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
1.2、乱序数据的影响

(1)当Flink以Event Time模式处理数据流时,它会根据数据里的时间戳来处理基于时间的算子
(2)由于网络、分布式等原因,会导致乱序数据的产生
(3)乱序数据会让窗口计算不准确
二、Watermark(水位线)
(1)怎样避免乱序数据带来计算不正确?
(2)遇到一个时间戳达到了窗口关闭窗口,不应该立刻触发窗口计算,而是等待一段时间,等迟到的数据来了再关闭窗口
Watermark是一种衡量Event Time进展的机制,可以设定延迟触发
Watermark是用于处理乱序事件的,而正确的处理乱序事件,通常用Watermark机制结合window来实现。
数据流中的Watermark用于表示timestamp小于Watermark的数据都已经到达了,因此,window的执行也是由Watermark触发的。
watermark用来让程序自己平衡延迟和结果正确性。
2.1、Watermark的特点

(1)watermark是一条特殊的数据记录
(2)watermark必须单调递增,以确保任务的事件时间时钟在向前推进,而不是在后退
(3)watermark与数据的时间戳相关
2.2、watermark的传递

2.3、watermark的引入
Event Time的使用一定要指定数据源中的时间戳
调用.assignTimestampsAndWatermarks()方法,传入一个BoundedOutOfOrdernessTimestampExtractor,就可以指定watermark
dataStream.assignTimestampsAndWatermarks(
new BoundedOutOfOrdernessTimestampExtractor[SensorReading]
(Time.milliseconds(1000)){
override def extractTimestamp(element: SensorReading): Long = {
element.timestamp * 1000
}
}
)
对于排好序的数据,不需要延迟触发,可以只指定时间戳就行了
dataStream.assignAscendingTimestamps(_.timestmap * 1000)
Flink暴露了TimestampAssigner接口供我们实现,使我们可以自定义如何从事件数据中抽取时间戳和生成watermark
dataStream.assignTimestampsAndWatermarks(new MyAssigner())
MyAssigner可以有两种类型,都继承自TimestampAssigner
2.4、TimestampAssigner
定义了抽取时间戳,以及生成watermark的方法,有两种类型,
(1)AssignerWithPeriodicWatermarks
① 周期性的生成watermark:系统会周期性的将watermark插入到流中
② 默认周期是200毫秒,可以使用ExecutionConfig.setAutoWatermarkInterval()方法进行设置
③ 升序和前面乱序的处理BounderOutOfOrderness,都是基于周期性watermark的
(2)AssignerWithPunctuatedWatermarks:没有时间周期规律,可打断生成watermark
2.5、watermark的设定
在Flink中,watermark由应用程序开发人员生成,这通常需要对相应的领域有一定的了解。如果watermark设置的延迟太久,收到结果的速度可能就会很慢,解决办法是在水位线到达之前输出一个近似结果。而如果watermark到达太早,则可能收到错误结果,不过Flink处理延迟数据的机制可以解决这个问题。
— 业精于勤荒于嬉,行成于思毁于随 —
Flink - [05] 时间语义 & Watermark的更多相关文章
- 02-flink时间语义 与 Window 基础概念与实现原理
Flink 多种时间语义对比 Flink 在流应用程序中支持不同的 Time 概念,就比如有 Processing Time.Event Time 和 Ingestion Time.下面我们一起来看看 ...
- 【大数据面试】Flink 03-窗口、时间语义和水印、ProcessFunction底层API
三.窗口 1.窗口的介绍 (1)含义 将无限的流式数据切割为有限块处理,以便于聚合等操作 (2)图解 2.窗口的分类 (1)按性质分 Flink 支持三种划分窗口的方式,time.count和会话窗口 ...
- 【Flink】概念、入门、部署(yarn和standalone模式)、架构(组件和运行流程)、批处理、流处理API、window、时间语义、Wartermark、ProcessFunction、状态编程、Table API和SQL、CEP、面试题
一.Flink简介 1.概述 Apache Flink是为分布式.高性能.随时可用以及准确的流处理应用程序打造的开源流处理框架 对无界和有界数据流进行有状态计算 2.重要特点 (1)事件驱动型:从一个 ...
- Flink的时间类型和watermark机制
一FlinkTime类型 有3类时间,分别是数据本身的产生时间.进入Flink系统的时间和被处理的时间,在Flink系统中的数据可以有三种时间属性: Event Time 是每条数据在其生产设备上发生 ...
- Flink流处理(四)- 时间语义
4. 时间语义(Time Semantics) 这章我们会介绍时间语义,以及在流中,对于时间的各种不同的概念的描述.同时我们也会讨论一个流处理器在事件乱序的情况下,如何能提供精准的结果,以及如何使用流 ...
- 可以穿梭时空的实时计算框架——Flink对时间的处理
Flink对于流处理架构的意义十分重要,Kafka让消息具有了持久化的能力,而处理数据,甚至穿越时间的能力都要靠Flink来完成. 在Streaming-大数据的未来一文中我们知道,对于流式处理最重要 ...
- Flink Pre-defined Timestamp Extractors / Watermark Emitters(预定义的时间戳提取/水位线发射器)
https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/event_timestamp_extractors.html 根据官网 ...
- 关于flink的时间处理不正确的现象复现&原因分析
跟朋友聊天,说输出的时间不对,之前测试没关注到这个,然后就在processing模式下看了下,发现时间确实不正确 然后就debug,看问题在哪,最终分析出了原因,记录如下: 最下面给出了复现方案 ...
- Flink水印机制(watermark)
Flink流处理时间方式 EventTime 时间发生的时间,例如:点击网站上的某个链接的时间 IngestionTime 某个Flink节点的source operator接收到数据的时间,例如:某 ...
- flink 根据时间消费kafka
经常遇到这样的场景,13点-14点的时候flink程序发生了故障,或者集群崩溃,导致实时程序挂掉1小时,程序恢复的时候想把程序倒回13点或者更前,重新消费kafka中的数据. 下面的代码就是根据指定时 ...
随机推荐
- vscode 你想要的配置
配置用户代码片段 文件 → 首选项 → 配置用户代码片段 比如配置一个vue3的代码片段: { "vue3-code": { "prefix": "v ...
- 小程序,用户授权手机号,node需要检验和解析
1. 第一步需要先在小程序api文档中下载对应语言的解密算法,解压之后就可以看到 https://developers.weixin.qq.com/miniprogram/dev/framework/ ...
- PDFSharp 常见问题
PDFSharp 常见问题 PDFsharp: Frequently Asked Questions - PDFsharp and MigraDoc Wiki 1. PDFSharp 是什么? PDF ...
- windows 也支持右键复制文件名了
mac 有一个操作,alt + 右键,出现的菜单有复制路径一项.不用羡慕,现在 windows 也有这个功能了. Shift + 右键,"复制为路径":
- 断言、drf之请求与响应
目录 一.断言 二.drf之请求 2.1 Request能够解析的前端传入的编码格式 2.2 Request类有哪些属性和方法(学过) 常用参数 Response类的实例化参数 三.drf之响应 3. ...
- Mockito入门:如何在Spring中Mock部分对象
前情提要 随着分布式应用的开发逐渐成为标配,多个微服务团队合作来完成垂直业务的开发成为了一种常态.微服务使得团队可以专注于自己的业务逻辑,在和下游依赖和上游对接的团队聚焦好接口之后,就进入正式的开发. ...
- Iframe标签显示目标网页的指定区域,视频可全屏可缩小
由于播放的直播视频有多余的logo和聊天框等所以需要去掉,用Iframe标签显示目标网页的指定区域,视频可全屏可缩小 用自己私人的服务器来测试吧,99买阿里云 HTML代码 <html> ...
- vue3 路由-导航守卫
假设用户登录,在地址栏输入了Login,人性化的设计应该自动回到home页面.或者用户输入不存在路由,也应该回到home页面. 这个时候需要用到vue-router的导航守卫功能. 在我们封装的rou ...
- Pelco-D控制协议
1. 通令参数: 标准速率为4800bps,无校验, 8位数据位,1位停止位 2.命令串格式: 一个PTZ控制命令为7字节的十六进制代码,格式如下: Word 1 Word2 Word 3 Wor ...
- Spring Security默认登录页面代码位于哪里?
问:Spring Security默认登录页面代码位于哪里? 答:它是从此类生成的org.springframework.security.web.authentication.ui.DefaultL ...