短分享-Flink图构建

一、背景

通过简单的书写map、union、keyby等代码,Flink便能构建起一个庞大的分布式计算任务,Flink如何实现的这个酷炫功能呢?我们本次分享Flink做的第一步,将代码解析构建成图

源码基于Flink 2.10,书籍参考《Flink核心技术源码剖析与特性开发》第四章

我这次会用一个简单的代码来举例图的构建过程

二、例子代码

以上代码转换关系如下图:

三、代码转StreamGraph

3.1 路由关系的搭建

Flink中每一次转换(如map)用Transformation表示,每次转换都会有一条类似的边被保存(Transformation1-> Transformation2) ,而所有的关联关系存储在Environment的transformations中

3.2 路由关系转StreamGraph

有了所有的边,就可以将边构成图了,图主要通过递归关系构建,不同Transformation有不同处理策略,对于map会把该结点和它之前的结点构成边,对于union会把它的前后结点连接起来,对于keyby会变成边的策略

转换之后图如下所示,可以看到union和keyby都消失了

我们debug中间过程,可以看到确实是7个结点

且keyby变成了边的策略

四、StreamGraph转JobGraph

在这一步会做很做很多重要操作,比如结点链接,配置检查点,设置分布式缓存文件等,我们本次主要聚焦于结点的链接,满足如下条件的会被链接

StreamGraph转JobGraph同样通过递归进行,链接完后的图如下图所示,map1和map2被链接,map4和slink被链接:

可以debug中间过程,可以看到确实是只剩了5个结点:

如果我们再加上实际的对象,实际如下图所示,每个结点是一个JobVertex,IntermediateDataSet 对象就是数据写入的地方,JobEdge是连接关系

其中ID是IntermediateDataSet,为后面数据分区做准备

JE是JobEdge

五、JobGraph转ExecutionGraph

JobGraph创建好之后,会被提交到JobManager,在JobManager中会根据JobGraph图做拓扑排序,然后完成JobGraph到ExecutionGraph的转化,其中:

JobVertex一比一转换ExecutionJobVertex,ExecutionJobVertex会根据并发度拆分成ExecutionVertex,比如map1->Map2,就会变成两个ExecutionVertex

IntermediateDataSet会转成IntermediateResult,并根据生产结点个数,拆成不同的数据分区IntermediateResultPartition,比如map1->Map2,就会变成两个ExecutionVertex,同时有两个IntermediateResultPartition

转换之后的图为如下所示,其中:

IRP=IntermediateResultPartition 表示一个数据分区,数据分区满了之后会Flink会根据边ExecutionEdge的关联关系,提醒下游获取数据,进行计算

EE=ExecutionEdge表示一条边

EJV=ExecutionJobVertex 表示一个Task任务,由JobVertex一比一转换

EV=ExecutionVertex,由ExecutionJobVertex根据并发度拆出来的

根据debug断点也可以看到确实有五个ExecutionJobVertex,其中map1->map2结点有两个ExecutionVertex,每个ExecutionVertex有一个IntermediateResultPartition

六、后续

Execution是ExecutionVertex的执行抽象,Flink构成图之后,会将Execution结点分发到各个TaskManager进行执行,可以看下面本地debug图,各个Execution刚刚处于创建状态等待执行,具体后续执行流程各位感兴趣可以再继续探究

相关推荐
老蒋新思维6 小时前
创客匠人峰会深度解析:知识变现的 “信任 - 效率” 双闭环 —— 从 “单次交易” 到 “终身复购” 的增长密码
大数据·网络·人工智能·tcp/ip·重构·数据挖掘·创客匠人
EveryPossible8 小时前
优先级调整练习1
大数据·学习
B站计算机毕业设计之家9 小时前
基于大数据热门旅游景点数据分析可视化平台 数据大屏 Flask框架 Echarts可视化大屏
大数据·爬虫·python·机器学习·数据分析·spark·旅游
Jackeyzhe9 小时前
Flink学习笔记:如何做容错
flink
亿坊电商11 小时前
无人共享茶室智慧化破局:24H智能接单系统的架构实践与运营全景!
大数据·人工智能·架构
老蒋新思维11 小时前
创客匠人峰会新解:AI 时代知识变现的 “信任分层” 法则 —— 从流量到高客单的进阶密码
大数据·网络·人工智能·tcp/ip·重构·创始人ip·创客匠人
Jerry.张蒙11 小时前
SAP业财一体化实现的“隐形桥梁”-价值串
大数据·数据库·人工智能·学习·区块链·aigc·运维开发
一勺-_-11 小时前
.git文件夹
大数据·git·elasticsearch
秋刀鱼 ..13 小时前
2026年电力电子与电能变换国际学术会议 (ICPEPC 2026)
大数据·python·计算机网络·数学建模·制造
G皮T14 小时前
【Elasticsearch】 大慢查询隔离(一):最佳实践
大数据·elasticsearch·搜索引擎·性能调优·索引·性能·查询