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

相关文章

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,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思