题记部分

一、时间语义

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的更多相关文章

  1. 02-flink时间语义 与 Window 基础概念与实现原理

    Flink 多种时间语义对比 Flink 在流应用程序中支持不同的 Time 概念,就比如有 Processing Time.Event Time 和 Ingestion Time.下面我们一起来看看 ...

  2. 【大数据面试】Flink 03-窗口、时间语义和水印、ProcessFunction底层API

    三.窗口 1.窗口的介绍 (1)含义 将无限的流式数据切割为有限块处理,以便于聚合等操作 (2)图解 2.窗口的分类 (1)按性质分 Flink 支持三种划分窗口的方式,time.count和会话窗口 ...

  3. 【Flink】概念、入门、部署(yarn和standalone模式)、架构(组件和运行流程)、批处理、流处理API、window、时间语义、Wartermark、ProcessFunction、状态编程、Table API和SQL、CEP、面试题

    一.Flink简介 1.概述 Apache Flink是为分布式.高性能.随时可用以及准确的流处理应用程序打造的开源流处理框架 对无界和有界数据流进行有状态计算 2.重要特点 (1)事件驱动型:从一个 ...

  4. Flink的时间类型和watermark机制

    一FlinkTime类型 有3类时间,分别是数据本身的产生时间.进入Flink系统的时间和被处理的时间,在Flink系统中的数据可以有三种时间属性: Event Time 是每条数据在其生产设备上发生 ...

  5. Flink流处理(四)- 时间语义

    4. 时间语义(Time Semantics) 这章我们会介绍时间语义,以及在流中,对于时间的各种不同的概念的描述.同时我们也会讨论一个流处理器在事件乱序的情况下,如何能提供精准的结果,以及如何使用流 ...

  6. 可以穿梭时空的实时计算框架——Flink对时间的处理

    Flink对于流处理架构的意义十分重要,Kafka让消息具有了持久化的能力,而处理数据,甚至穿越时间的能力都要靠Flink来完成. 在Streaming-大数据的未来一文中我们知道,对于流式处理最重要 ...

  7. Flink Pre-defined Timestamp Extractors / Watermark Emitters(预定义的时间戳提取/水位线发射器)

    https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/event_timestamp_extractors.html 根据官网 ...

  8. 关于flink的时间处理不正确的现象复现&原因分析

    跟朋友聊天,说输出的时间不对,之前测试没关注到这个,然后就在processing模式下看了下,发现时间确实不正确 然后就debug,看问题在哪,最终分析出了原因,记录如下:    最下面给出了复现方案 ...

  9. Flink水印机制(watermark)

    Flink流处理时间方式 EventTime 时间发生的时间,例如:点击网站上的某个链接的时间 IngestionTime 某个Flink节点的source operator接收到数据的时间,例如:某 ...

  10. flink 根据时间消费kafka

    经常遇到这样的场景,13点-14点的时候flink程序发生了故障,或者集群崩溃,导致实时程序挂掉1小时,程序恢复的时候想把程序倒回13点或者更前,重新消费kafka中的数据. 下面的代码就是根据指定时 ...

随机推荐

  1. GPU 驱动漏洞:窥探驱动漏洞利用的技术奥秘

    GPU 驱动漏洞:窥探驱动漏洞利用的技术奥秘 本文尝试以 GPU 漏洞为引介绍围绕 GPU 驱动这一攻击面,安全研究人员对内核漏洞利用技术做的一些探索. 背景介绍 目前移动 SOC 平台上由多个硬件模 ...

  2. 【杂谈】服务端能同时处理多少个 Socket 连接?背后的资源与限制分析

    一个服务端进程能同时连接多少个 Socket? 要理解一个服务端进程能同时支持多少个连接,首先我们需要明确一个 socket 连接 的表示方式.一个连接由四个部分组成:[LocalIP:LocalPo ...

  3. 大文件传输与断点续传实现(极简Demo: React+Node.js)

    大文件传输与断点续传实现(极简Demo:React+Node.js) 简述 使用React前端和Node.js后端实现大文件传输和断点续传的功能.通过分片上传技术,可以有效地解决网络不稳定带来的传输中 ...

  4. 关于在Rocky linux下安装dotnet sdk不成功的问题

    Rocky Linux 9,运行 dnf install -y dotnet-sdk-6.0 一切正常,运行起来非常顺利,安装完毕.但是非常诡异,运行 dotnet --list-sdks dotne ...

  5. Qt自定义控件大全文章导航

    文章 链接 Qt编写自定义控件1-汽车仪表盘 https://qtchina.blog.csdn.net/article/details/89407746 Qt编写自定义控件2-进度条标尺 https ...

  6. C Primer Plus 第6版 第二章 编程练习参考答案

    编译环境VS Code+WSL GCC /*第一题*************************/ #include<stdio.h> int main() { printf(&quo ...

  7. IntelliJ IDEA2020永久激活破解教程(无限试用)

    IntelliJ IDEA2020激活破解教程(无限试用) 鉴于想拥有一个十分舒适的编程环境,我特意将自己的电脑运行内存从4G扩展到12G,加装一个256G的固态作为C盘,并且将系统升级为Window ...

  8. CDS标准视图:一次性账户的客户行项目 I_ONETIMEACCOUNTCUSTOMER

    视图名称:一次性账户的客户行项目 视图类型:基础 视图代码: 点击查看代码 @EndUserText.label: 'One-Time Account Data for Customer Items' ...

  9. CDS标准视图:测量文档数据 I_MeasurementDocumentData

    视图名称:测量文档数据 I_MeasurementDocumentData 视图类型:基础视图 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'IMEASDOCDATA ...

  10. G1原理—3.G1是如何提升垃圾回收效率

    大纲 1.G1为了提升GC的效率设计了哪些核心机制 2.G1中的记忆集是什么 3.G1中的位图和卡表 4.记忆集和卡表有什么关系 5.RSet记忆集是怎么更新的 6.DCQ机制的底层原理是怎样的 7. ...