购物网站成品,惠州网站设计哪家好,wordpress标题怎么改,建筑工程网格化管理制度一、背景
通过简单的书写map、union、keyby等代码#xff0c;Flink便能构建起一个庞大的分布式计算任务#xff0c;Flink如何实现的这个酷炫功能呢#xff1f;我们本次分享Flink做的第一步#xff0c;将代码解析构建成图
源码基于Flink 2.10#xff0c;书籍参考《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个结点 如果我们再加上实际的对象实际如下图所示每个结点是一个JobVertexIntermediateDataSet 对象就是数据写入的地方JobEdge是连接关系
其中ID是IntermediateDataSet为后面数据分区做准备
JE是JobEdge 五、JobGraph转ExecutionGraph
JobGraph创建好之后会被提交到JobManager在JobManager中会根据JobGraph图做拓扑排序然后完成JobGraph到ExecutionGraph的转化其中
JobVertex一比一转换ExecutionJobVertexExecutionJobVertex会根据并发度拆分成ExecutionVertex比如map1-Map2就会变成两个ExecutionVertex
IntermediateDataSet会转成IntermediateResult并根据生产结点个数拆成不同的数据分区IntermediateResultPartition比如map1-Map2就会变成两个ExecutionVertex同时有两个IntermediateResultPartition
转换之后的图为如下所示其中
IRPIntermediateResultPartition 表示一个数据分区数据分区满了之后会Flink会根据边ExecutionEdge的关联关系提醒下游获取数据进行计算
EEExecutionEdge表示一条边
EJVExecutionJobVertex 表示一个Task任务由JobVertex一比一转换
EVExecutionVertex由ExecutionJobVertex根据并发度拆出来的 根据debug断点也可以看到确实有五个ExecutionJobVertex其中map1-map2结点有两个ExecutionVertex每个ExecutionVertex有一个IntermediateResultPartition 六、后续
Execution是ExecutionVertex的执行抽象Flink构成图之后会将Execution结点分发到各个TaskManager进行执行可以看下面本地debug图各个Execution刚刚处于创建状态等待执行具体后续执行流程各位感兴趣可以再继续探究