Flink源码阅读:流中的四种值类型

2024-05-25 20:38

本文主要是介绍Flink源码阅读:流中的四种值类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在DataStream中流动有的元素有四种类型,分别是Watermark,StreamStatus,StreamRecord和LatencyMarker.它们都是StreamElement的子类.下面分别介绍一下,对以后理解其他内容会有帮助.

继承关系图:

继承关系图

下面是对注释的翻译以及自己的理解

Watermark

指示元素timestamp小等于watermark的值都已经到了,算子通过调用org.apache.flink.streaming.api.operators.Output.emitWatermark(Watermark),将watermark发送到下游.

watermark在时间窗口上非常有用,窗口根据watermark触发,另外watermark可以用来处理迟到数据.

当source关闭的 时候会发送一个timestamp为Long.MAX_VALUE的watermark,当算子收到这个MAX_VALUE的watermark的时候就会知道不会再有输入了.

StreamStatus

StreamStatus可以代表两种状态,一种是IDLE,一种是ACTIVE.

以StreamStatus的角度会将任务分成SourceTask和StreamTask,StreamStatus从SourceTask生成并发出用来通知StreamTask是否会继续收到数据元素或者watermark.

当SourceTask读取不到输入数据的时候它会通过发送一个IDEL状态表示暂时停止提交数据元素和watermark,一旦SourceTask发现可以读取到数据的时候他会发送一个ACTIVE状态

当StreamTask的所有SourceTask 全部 处于IDEL状态的时候认为这个StreamTask处于IDEL状态

由于SourceTask保证在IDEL状态和ACTIVE状态之间不会发生数据元素,所以StreamTask可以在不需要检查当前的状态的情况下安全的处理和传播收到数据元素.但是由于拓扑的任何地方都可以产生watermark,所以当前StreamTask在发送watermark之前必须检查当前的状态,如果当前的状态是IDEL,则watermark会被阻塞.

对于有多个输入的StreamTask,输入流的watermark暂时处于IDEL状态或刚恢复到ACTIVE状态但是它的watermark落后于所有operator中最小的watermark,它的watermark不应该用来绝定是否提高watermark,也不能通过operator链向下传播.(注释的句子写的太长没读太懂)

注意:当source通知下游SourceTask永久关闭的时候会发送一个前面说的值为Watermark.MAX_WATERMARK的watermark而不是一个IDEL状态.

StreamRecord

DataStream中的数据的一个包装,在你自己写的代码中实际可能是POJO,Tuple,Row或你自定义的值类型,一般情况会用Flink自带的Row类型,StreamRecord就是将你用的数据类型包装一下然后带了一个可选的关联的时间戳.

LatencyMarker

一种特殊的类型,它携带一个从source被创造出来的时间戳,vertexId和source的subtask index.

在sink中,这个marker可以用来近似的估计一条数据经过整个dataflow的时间.

这篇关于Flink源码阅读:流中的四种值类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002574

相关文章

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

C# List.Sort四种重载总结

《C#List.Sort四种重载总结》本文详细分析了C#中List.Sort()方法的四种重载形式及其实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录1. Sort方法的四种重载2. 具体使用- List.Sort();- IComparable

C# WebAPI的几种返回类型方式

《C#WebAPI的几种返回类型方式》本文主要介绍了C#WebAPI的几种返回类型方式,包括直接返回指定类型、返回IActionResult实例和返回ActionResult,文中通过示例代码介绍的... 目录创建 Controller 和 Model 类在 Action 中返回 指定类型在 Action

python中的鸭子类型详解

《python中的鸭子类型详解》鸭子类型是Python动态类型系统的灵魂,它通过强调“行为”而非“类型”,赋予了代码极大的灵活性和表现力,本文给大家详细介绍python中的鸭子类型,感兴趣的朋友一起看... 目录1. 核心思想:什么是鸭子类型?2. 与“传统”静态类型语言的对比3. python 中无处不在

Java枚举类型深度详解

《Java枚举类型深度详解》Java的枚举类型(enum)是一种强大的工具,它不仅可以让你的代码更简洁、可读,而且通过类型安全、常量集合、方法重写和接口实现等特性,使得枚举在很多场景下都非常有用,本文... 目录前言1. enum关键字的使用:定义枚举类型什么是枚举类型?如何定义枚举类型?使用枚举类型:2.

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与