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

相关文章

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Conda虚拟环境的复制和迁移的四种方法实现

《Conda虚拟环境的复制和迁移的四种方法实现》本文主要介绍了Conda虚拟环境的复制和迁移的四种方法实现,包括requirements.txt,environment.yml,conda-pack,... 目录在本机复制Conda虚拟环境相同操作系统之间复制环境方法一:requirements.txt方法

SpringBoot整合Apache Flink的详细指南

《SpringBoot整合ApacheFlink的详细指南》这篇文章主要为大家详细介绍了SpringBoot整合ApacheFlink的详细过程,涵盖环境准备,依赖配置,代码实现及运行步骤,感兴趣的... 目录1. 背景与目标2. 环境准备2.1 开发工具2.2 技术版本3. 创建 Spring Boot

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

查看MySQL数据库版本的四种方法

《查看MySQL数据库版本的四种方法》查看MySQL数据库的版本信息可以通过多种方法实现,包括使用命令行工具、SQL查询语句和图形化管理工具等,以下是详细的步骤和示例代码,需要的朋友可以参考下... 目录方法一:使用命令行工具1. 使用 mysql 命令示例:方法二:使用 mysqladmin 命令示例:方

Java调用Python的四种方法小结

《Java调用Python的四种方法小结》在现代开发中,结合不同编程语言的优势往往能达到事半功倍的效果,本文将详细介绍四种在Java中调用Python的方法,并推荐一种最常用且实用的方法,希望对大家有... 目录一、在Java类中直接执行python语句二、在Java中直接调用Python脚本三、使用Run

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整