IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Flink的时间语义总结 -> 正文阅读

[大数据]Flink的时间语义总结

在实际的工作中慢慢摸索和使用Flink也有将近一年的时间了,这段时间打算好好总结和整理一下,有兴趣想要了解Flink流处理技术的,看我的这个博客合集就可以了。如果有什么问题可以多多讨论交流。以下进入正文。

1. Flink支持的时间语义

Flink支持三种时间语义:事件时间,吸入时间和处理时间。三个时间的概念还是比较简单的,不再赘述。
三种时间语义的图示
在源代码中表示如下:

@PublicEvolving
public enum TimeCharacteristic {
	ProcessingTime,
	IngestionTime,
	EventTime
}

设置时间语义的方法:

final StreamExecutionEnvironment env=StreamExecutionEnvironment.getExecutionEnvironment();
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

需要注意的是:一般情况下,如果使用的是EventTime语义,则需要在Source算子之后明确指定Timestamp AssignerWatermark Generator

2. Watermark机制

2.1 背景

在实时分布式系统中,受到网络阻塞等影响,会造成out-of-order data或者late data,对于这部分数据,出于实时性的需要,不可能一直等下去,必须要有个机制保证在某个时间点之后就该触发窗口中数据的计算了。

2.2 作用

(1)衡量事件时间的进展情况,表示在当前Watermark之前的数据都已经到齐了。
(2)用于触发基于事件时间的窗口的计算
(3)计算公式:当前系统观察到的最大事件时间 - 最大延迟处理时间,且为单调递增

2.3 种类

(1)有序流的水位线:
在这里插入图片描述
(2)乱序流的水位线:
在这里插入图片描述
(3)并行流中的水位线:
此处需要记住一点即可:一个算子的多个并行实例会进行水位线的对齐,且会取所有并行实例中最小的。
在这里插入图片描述

3.生成时间戳和水位线

大前提:必须是事件时间语义下。
在该语义下,Flink程序自身需要知道每个进来的event的timestamp是什么,以及该如何分配Watermark。

3.1 方式一:在Source算子中生成

自定义Source算子实现SourceFunction或者RichParallelSourceFunction(一般不常用):
在这里插入图片描述

3.2 assignTimestampsAndWatermarks

在assignTimestampsAndWatermarks方法内指定timestamp assigner 和 watermark generator。
在这里插入图片描述

4.Watermark分类

4.1 Periodic Watermark

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
或者:
在这里插入图片描述

4.2 Puncuated Watermark

间断性,非周期性的生成。
在这里插入图片描述

在这里插入图片描述

4.3 内置Timestamp Assigner和Watermark Generator

(1)AscendingTimestampExtractor
在这里插入图片描述
(2)BoundedOutOfOrdernessTimestampExtractor
允许固定延迟
在这里插入图片描述

5. 延迟数据的处理

5.1 默认方式:丢弃

对于晚于watermark,且超过了允许迟到的时间(如果设置了的话)的数据,Flink默认会丢弃该数据不做计算。

5.2 允许延迟更新

allowedLateness()方法:需要考虑数据结果的幂等性!
在这里插入图片描述

5.3 侧输出

可以获取到迟到的数据,另行处理,保证数据不会丢失。
在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:21:27  更:2021-09-29 10:22:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:44:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码