当前位置:网站首页>Flink1.15源码阅读——StreamGraph流图
Flink1.15源码阅读——StreamGraph流图
2022-08-08 13:00:00 【京河小蚁】
Graph的概念
Flink中的执行图可以分成四层:
StreamGraph -> JobGraph -> ExecutionGraph -> 物理执行图

StreamGraph
是根据用户代码通过Stream API编写的代码生成的最初的图。用来表示程序的拓扑结构。
在客户端生成流图
- StreamNode: 用来代表operator的类,并具有所有相关的属性,如并发度、入边、出边等。
- StreamEdge: 表示连接两个StreamNode的边。
JobGraph
StreamGraph 经过优化后生成了JobGraph,提交给Jobmanager的数据结构,主要的优化为,将多个符合条件的节点 chain在一起作为一个节点,这样可以减少数据在节点之间流动所需要的序列化/反序列化/传输消耗。
在客户端生成作业图
- JobVertex: 经过优化后符合条件的多个StreamNode可能会chain在一起生成一个Vertex,即一个JobVertex包含一个或者多个Operator, JobVertex 的输入是 JobEdge. 输出是 IntermediateDataSet。
- JobEdge: 表示 JobGraph 中的一 个数据流转通道, 其上游数据源是 IntermediateDataSet ,下游消费者是 JobVertex 。即数据通过 JobEdge 由IntermediateDataSet 传递给目标 JobVertex; JobEdge 中的数据分发模式,会直接影响执行时 Task 之间的数据连接关系,是点对点连接还是全连接。
- IntermediateDataSet: 中间数据集 IntermediateDataSet 是一种逻辑结构,用来表示 JobVertex 的输出,即经过算子处理产生的数据集。不同的执行模式下,其对应的结果分区类型不同,决 定了在执行时刻数据交换的模式。
ExecutionGraph
JobManager根据JobGraph生成的。ExecutionGraph是JobGraph的并行化版本,是调度层最核心的数据结构。
从jobgraph生成ExecutionGraph是在jobmaster中完成的。
ExecutionJobVertex
该对象和 JobGraph 中的 JobVertex 一 一对应。该对象还包含一组 ExecutionVertex, 数量 与该 JobVertex 中所包含的StreamNode 的并行度一致,假设 StreamNode 的并行度为5 ,那么ExecutionJobVertex中也会包含 5个ExecutionVertex。
ExecutionJobVertex用来将一个JobVertex 封装成 ExecutionJobVertex,并依次创建 ExecutionVertex、Execution、IntermediateResult 和 IntermediateResultPartition,用于丰富ExecutionGraph。ExecutionVertex
ExecutionJobVertex会对作业进行并行化处理,构造可以并行执行的实例,每一个并行执行的实例就是 ExecutionVertex。IntermediateResult
IntermediateResult 又叫作中间结果集,该对象是个逻辑概念 表示 ExecutionJobVertex输出,和 JobGraph 中的IntermediateDalaSet 一 一对应,同样 一个ExecutionJobVertex 可以有多个中间结果,取决于当前 JobVertex 有几个出边(JobEdge)。IntermediateResultPartition
IntermediateResultPartition 又叫作中间结果分区。表示一个 ExecutionVertex分区的输出结果,与 Execution Edge 相关联。ExecutionEdge
表示ExecutionVertex 的输入,连接到上游产生的IntermediateResultPartition,一个Execution对应唯一的一个IntermediateResultPartition 和一个ExecutionVertex,一个ExecutionVertex 可以有多个ExecutionEdge。Execution
ExecutionVertex 相当于每个 Task 的模板,在真正执行的时候,会将ExecutionVertex中的信息包装为一个Execution,执行一个ExecutionVertex的一次尝试。
当发生故障或者数据需要重算的情况下 ExecutionVertex 可能会有多个 ExecutionAttemptID。一个 Execution 通过 ExecutionAttemptID 来唯一标识。
JM和TM之间关于 task 的部署和 task status 的更新都是通过 ExecutionAttemptID 来确定消息接受者。
物理执行图
JobManager根据Execution对job进行调度后,在各个TaskManager上部署Task后形成的图,并不是一个具体的数据结构。
边栏推荐
- 又一个千亿市场,冰淇淋也成了创新试验田
- 北京 北京超大旧货二手市场开集了,上千种产品随便选,来的人还真不少
- 【软考 系统架构设计师】软件架构设计⑦ 构件与中间件技术
- [C language] Dynamic memory management
- 华谊“在劫难逃”,4年亏掉64亿
- qsort 函数的使用及其模拟实现
- 数据解析(XPath、BeautifulSoup、正则表达式、pyquery)
- changes not staged for commit 解决办法
- Five-faced Alibaba rated P6 after taking the offer: share his interview experience
- C language small project -- address book (static version + dynamic version + file version)
猜你喜欢

程序员必备的VS调试技巧

【C语言】深度剖析数据在内存中的存储

移位运算、位运算、逻辑运算相关知识点及笔试题

C语言小项目 -- 扫雷游戏完整代码(递归展开 + 选择标记)

【C语言】动态内存管理

2022-08-03
![[C language] In-depth analysis of data storage in memory](/img/7c/a277657a85cc0e29db8df919439949.png)
[C language] In-depth analysis of data storage in memory

一桩事先张扬的网红书店倒闭案

The use of string function, character function, memory function and its analog implementation

changes not staged for commit 解决办法
随机推荐
又一个千亿市场,冰淇淋也成了创新试验田
SAP数据迁移需要多久?
Win10环境下使用Flask配合Celery异步推送实时/定时消息(Socket.io)/2020年最新攻略
看到这个应用上下线方式,不禁感叹:优雅,太优雅了!
R语言ggplot2可视化:使用ggpubr包的ggdonutchart函数可视化甜甜圈图(donut chart)、为甜甜圈图添加自定义标签(包含文本内容以及数值百分比)、lab.font参数设置标
Server Configuration - Install Redis on Linux System
【黑马早报】巴菲特罕见巨亏近3000亿;周鸿祎回应360不能卸载;三亚倡议酒店不变相提高房价;首个国产抗新冠口服药定价不超300元...
R语言ggplot2可视化:基于aes函数中的fill参数和shape参数自定义绘制分组折线图并添加数据点(散点)、设置可视化图像的主题为theme_gray
Program Environment and Preprocessing
【第2天】SQL快速入门-条件查询(SQL 小虚竹)
建材业深陷数字化困局,B2B协同系统标准化交易流程,解决企业交易网络化难题
程序员必备的VS调试技巧
迁移学习(Transfer Learning)的背景、历史及学习课
自动当道,效率至上 | 快来解锁财务共享服务中心数字化秘籍
nvm的使用 nodejs版本管理,解决用户名是汉字的问题
SSL证书最长有效期13个月,还有必要一次申请多年吗?
changes not staged for commit 解决办法
odps sql被删除了,能找回来吗
什么是IP SSL证书,如何申请?
(5) FlinkSQL writes socket data to mysql Method 2