题记部分

一、时间语义

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. 你真的懂System.out.println()吗?

    简介 众所周知,Java语言是面向对象的,那如果让你用一行代码体现出来呢? 如果你能自己读懂System.out.println(),就真正了解了Java面向对象编程的含义. 面向对象编程即创建了对象 ...

  2. Java 提取字符串中xml格式内容

    @ 目录 前言 简介 总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i. 提示:以下是本篇文章正文内容,下面案例可供参考 简介 在Java中,使用正则表达式来提取字符串中的XML格 ...

  3. 跨平台交叉编译 Native AOT

    如何将.NET 应用程序发布到鸿蒙上,肯定是很多人感兴趣的话题,目前.NET完全具备可以在OpenHarmony系统上运行的能力,.NET 现在有很多选项CoreCLR.Mono和NativeAOT. ...

  4. ChatGPT接口测试用例生成的流程

    通常,使用ChatGPT生成接口测试用例的流程可以分为以下关键步骤. 收集接口信息 收集接口的相关文档和信息,如接口名称.请求方法.请求参数.返回结果等.这些是ChatGPT生成测试用例需要的输入信息 ...

  5. 【人工智能】【Python】Numpy基础

    Numpy 目录 Numpy Numpy简介 ndarray与原生Python List运算效率对比 N阶数组 ndarray (1)创建数组 (2)生成数组 生成纯1数组 生成纯0数组 从现有数组生 ...

  6. 【Linux】【UOS】为挂载的磁盘创建快捷方式(软链接)

    打开项目或者保存文件的时候,如果需求路径不是系统盘路径,那么找起来还真是麻烦.以下时候通过创建快捷方式(软链接)的方式,将打开磁盘的快捷方式放在用户目录下,就方便寻找打开了. 1.查询挂载点 sudo ...

  7. 【报错解决】【人工智能】【深度学习】验证cuda和tensorflow之间的版本对应关系时遇到的问题

    验证环境B 验证成功,没有问题 验证环境A 得到结果false 检查是否与CUDA关联成功 tf.test.is_built_with_cuda() 发现没有关联成功 根据查询可知道,失败的原因是1. ...

  8. Xshell无法连接22端口问题解决办法汇总

    Xshell软件在进行远程连接过程中,会出现端口连接报错的问题,提示:"该IP地址的22端口连接失败",这是怎么回事?今天小编就xshell软件无法连接22端口的问题,整理相关情形 ...

  9. 【转载】wget命令详解

    导读: wget是Linux中的一个下载文件的工具,wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上. 它用在命令行下. ...

  10. vertx 获取请求参数

    表单登录(GET)   <form action="/login">   <input type="text" name="user ...