题记部分

一、时间语义

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. 【Amadeus原创】idea实现java前后端代码自动化调试

    代码结构: 1,meeting-server 后端  springBoot maven 2,metting-ui 前端    nodejs 3,两个文件夹都在early-meeting文件夹中 如何在 ...

  2. 鸿蒙应用开发从入门到入行 - 篇1:HarmonyOS介绍——带你深入理解鸿蒙特性

    鸿蒙应用开发从入门到入行 第一天 - HarmonyOS介绍 导读:在本篇文章里,您将了解到HarmonyOS是什么,以及有哪些振奋人心的特性.并且猫林老师会在本篇文章里给出结论:鸿蒙必能蚕食安卓份额 ...

  3. 使用 Web Compiler 2022+

    使用 Web Compiler 2022+ Web Compiler 2022+ for Visual Studio 2022 Web Compiler for Visual Studio 2019 ...

  4. 【Java】SpringBoot邮件发送实现

    Springboot3 邮件发送 哔哩哔哩 萌狼蓝天 微信公众号 萌狼蓝天 依赖 <dependency> <groupId>org.springframework.boot& ...

  5. 用EwoMail开源版搭建邮箱服务器

    介绍: EwoMail是基于Linux的开源邮件服务器,支持一键搭建,集成了众多优秀稳定的组件,是一个快速部署.简单高效.安全稳定的邮件解决方案,支持电脑和手机的客户端,适合个人或邮箱功能需求少的企业 ...

  6. Qt音视频开发36-超时检测和自动重连的设计

    一.前言 如果网络环境正常设备正常,视频监控系统一般都是按照正常运行下去,不会出现什么问题,但是实际情况会很不同,奇奇怪怪七七八八的问题都会出现,就比如网络出了问题都有很多情况(交换机故障.网线故障. ...

  7. Qt编写的项目作品36-秘钥生成工具

    一.功能特点 (一)常规秘钥机制 远程联网激活,每次启动都联网查看使用时间等,这种方法最完美,缺点是没法联网的设备就歇菜了,而很多设备都是要求离线使用无法联网. 通过获取本地的硬盘+CPU等硬件的编号 ...

  8. Java中使用Callable和FutureTask创建多线程的基本用法

    我们先定义一个Callable任务MyCallableTask: 步骤1:创建Callable实现类,并实现call()接口 package cn.cetc;//包名可自定义 import java. ...

  9. TagHelper中获取当前Url

    在自定义TagHelper时,我们无法通过TagHelperContext 和 TagHelperOutput 获取到当前路由的信息,我们需要添加注入ViewContext [HtmlAttribut ...

  10. Harbor 共享后端高可用

    1. 主机配置 主机地址 主机配置 主机角色 软件版本 192.168.1.60 CPU:4C MEM:4GB Disk: 100GB Harbor+Keepalived Harbor 2.1.3 K ...