当前位置:网站首页>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后形成的图,并不是一个具体的数据结构。
边栏推荐
- Pointer and array written test questions analysis
- 华谊“在劫难逃”,4年亏掉64亿
- R语言数据类型转换:基本数据类型的转换、将一种数据类型转化为另外一种数据类型
- webgl 基础
- 2022-08-04
- shell基础知识合集
- Using Flask and Celery to push real-time/timed messages asynchronously in Win10 environment (Socket.io)/The latest strategy in 2020
- 牛 plus,多层嵌套动态 JSON 该如何解析总结
- 使用.NET简单实现一个Redis的高性能克隆版(三)
- Photoshop插件-charIDToTypeID-PIStringTerminology.h-不同值的解释及参考-脚本开发-PS插件
猜你喜欢
五面阿里巴巴拿offer后定级P6:分享自己的面试经历
程序环境和预处理
Knowledge points and written test questions related to shift operations, bit operations, and logical operations
【黑马早报】巴菲特罕见巨亏近3000亿;周鸿祎回应360不能卸载;三亚倡议酒店不变相提高房价;首个国产抗新冠口服药定价不超300元...
The programmer essential VS debugging technique
Jenkins - install (2)
Jenkins - Introduction to Continuous Integration (1)
PE文件-手工修改重定位表-WinHex-CFF Explorer
The use of qsort function and its analog implementation
The most complete JVM performance tuning in history: thread + subsystem + class loading + memory allocation + garbage collection
随机推荐
五面阿里巴巴拿offer后定级P6:分享自己的面试经历
一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持
程序环境和预处理
【第2天】SQL快速入门-条件查询(SQL 小虚竹)
R语言ggplot2可视化:基于aes函数中的fill参数和shape参数自定义绘制分组折线图并添加数据点(散点)、设置可视化图像的主题为theme_gray
【C语言】深度剖析数据在内存中的存储
ctfshow 七夕杯(复现)
【软考 系统架构设计师】软件架构设计⑥ 软件产品线
指针和数组笔试题解析
C language small project - complete code of minesweeper game (recursive expansion + selection mark)
程序员必备的VS调试技巧
[界面开发]DevExpress WinForms流程图控件——XtraDiagrams组件入门指南
OFD是什么
【软考 系统架构设计师】软件架构设计⑦ 构件与中间件技术
(7) FlinkSQL kafka data written to the mysql way 2
别再到处乱放配置文件了!试试我司使用 7 年的这套解决方案,稳的一秕
Qt的简易日志库实现及封装
字符串函数、字符函数、内存函数的使用及其模拟实现
服务器配置——Linux系统安装Redis
张一鸣挺进生育大业