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中的数据. 下面的代码就是根据指定时 ...
随机推荐
- C# 转 Java
代码级转换,目前唯一可用的方案是 Tangible C# to Java Converter. 把编译后的 IL 转为 bytecode 再反编译也是一个思路,没有找到相关实现. 转换难点并不是语法, ...
- 【web】一个自适应的导航栏前端设计(只含HTML+CSS)
上一篇文章:[前端]CSS实现图片文字对齐 并随着设备尺寸改变而改变大小 本文是基于上一篇文章的补充. 效果如下 HTML源码 点击查看HTML代码 <!DOCTYPE html> < ...
- re模块:核心函数和方法
1.compile(pattren,flages=0) 使用任何可选的标记来编译正则表达式的模式然后返回一个正则表达式对象 2.match(pattern,string,flags=0) 尝 ...
- Qt编写的项目作品8-视频综合应用示例
一.功能特点 1.1 基础功能 支持各种音频视频文件格式,比如mp3.wav.mp4.asf.rm.rmvb.mkv等. 支持本地摄像头设备,可指定分辨率.帧率. 支持各种视频流格式,比如rtp.rt ...
- OGC——WMS服务
一.引言 一直用arcgis javascript的二次开发,经常使用它的一些服务WMS.WMTS.WFS.MapService等,并没有深入了解这些服务内部机制,直到最近学习了geoserver,由 ...
- UOS系统mysql服务安装
UOS系统mysql服务安装 背景 1.安装环境:kvm虚拟机 2.运行环境:uos server-1060e 3.架构:x86 4.安装mysql版本:mysql-5.7 1.安装准备 # Mysq ...
- Solution Set -「NOIP Simu.」20221014
\(\mathscr{A}\sim\)「Unknown」tothecrazyones 有 \(n\) 堆石子, 第 \(i\) 堆有 \(a_i\) 个. Alice 和 Bob 轮流抓取, Al ...
- Solution -「AGC 039F」Min Product Sum
\(\mathscr{Description}\) Link. 对于所有 \(n\times m\) 的矩阵 \(A\), \(a_{ij}\in[1,k]\cap\mathbb N\), 求 ...
- 【开源】C#上位机必备高效数据转换助手
一.前言 大家好!我是付工. 我们在进行上位机开发时,从设备端获取到的数据之后,需要进行一定的数据处理及转换,才能生成我们需要用的数据. 这其中就涉及到了各种数据类型之间的相关转换,很多非科班出身的电 ...
- Python调用ChatTTS API接口
Python调用ChatTTS API接口: #********************************************* #author:wgscd #date:2024-7-27 ...