Flink系列之Flink中四层Graph详解

news/2025/2/12 20:56:57/

title: Flink系列


四、Flink Runtime 四层 Graph 详解

首先回顾一下 Flink 的整体架构设计:

{% asset_img processes.svg %}
在这里插入图片描述

关于上图中的一些概念的解释:

1、DataFlow Graph 是一个逻辑概念,表示这个应用程序的一个执行图,事实上在客户端的时候,会生成两个图:StreamGraph + JobGraph注意:StreamGraph 中两种非常重要的概念: StreamNode(Operator 算子)顶点 + StreamEdge 边 。在源码的org.apache.flink.streaming.api.graph.StreamGraph 类中。2、Client 就是一个 Http 方式的 Restful Client ,负责提交 JobGraph 到 JobManager 中。3、Jobmanager 接收到 JobGraph 之后,会做一件非常重要的事情:启动一个 JobMaster , 这个 JobMaster 就是负责这个 Job 的执行的,JobMaster 的内部,维护了一个 JobGraph ; 在构造 JobMaster 的时候,同时也会帮 JobGraph 构造成 ExecutionGraph注意:ExecutionGraph = ExecutionVertex 顶点(这个顶点 里面有一个抽象就代表了一个 Task 的一切信息:Execution , 一个 Execution 会启动一个 Task)4、JobMaster 接下来会向 ResourceManager 申请 Slot 资源,申请到了之后会部署 Task 启动执行。(注意这个 ResourceManager 不是 YARN 里面的,是JobManager 里面的管理资源的组件)  5、当所有的 Task 都部署到 TaskManager 里面之后,并且都启动好了,并且上下游 Task 之间都建立了连接,则最终形成了一个 物理执行图。

Flink 的一个 Job最终归根结底,是去构建一个高效率的能用于分布式并行执行的 DAG 执行图。Flink 中的执行图可以分成四层:StreamGraph ==> JobGraph ==> ExecutionGraph ==> 物理执行图

StreamGraph:是根据用户通过 Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构。JobGraph:StreamGraph 经过优化后生成了 JobGraph,提交给 JobManager 的数据结构。主要的优化为,将多个符合条件的节点 chain 在一起作为一个节点,这样可以减少数据在节点之间流动所需要的序列化反序列化传输消耗。ExecutionGraph:JobManager 根据 JobGraph 生成 ExecutionGraph。ExecutionGraph 是 JobGraph 的并行化版本,是调度层最核心的数据结构。物理执行图:JobManager 根据 ExecutionGraph 对 Job 进行调度后,在各个 TaskManager 上部署 Task 后形成的图,并不是一个具体的数据结构。

Flink 四层图模型:

在这里插入图片描述

上面这张图清晰的给出了 Flink 各个图的工作原理和转换过程。其中最后一个物理执行图并非 Flink 的数据结构,而是程序开始执行后,各个 Task 分布在不同的节点 上,所形成的物理上的关系表示:

1、从 JobGraph 的图里可以看到,数据从上一个 operator(JobVertex) 流到下一个 operator(JobVertex) 的过程中,上游作为生产者提供了IntermediateDataSet,而下游作为消费者需要 JobEdge。事实上,JobEdge 是一个通信管道,连接了上游生产的 dataset和下游的 JobVertex 节点。

2、在 JobGraph 转换到 ExecutionGraph 的过程中,主要发生了以下转变:

(1)加入了并行度的概念,成为真正可调度的图结构
(2)生成了与 JobVertex 对应的 ExecutionJobVertex,ExecutionVertex,与 IntermediateDataSet 对应的 IntermediateResult 和 IntermediateResultPartition 等,并行将通过这些类实现

3、ExecutionGraph 已经可以用于调度任务。我们可以看到,Flink 根据该图生成了一一对应的 Task,每个 Task 对应一个ExecutionGraph 的一个 Execution。
Task 用 InputGate、InputChannel 和 ResultPartition 对应了上面图中的 IntermediateResult和 ExecutionEdge。

那么,设计中为什么要设计这么四层执行逻辑呢?它的意义是什么?

1、StreamGraph 是对用户逻辑的映射
2、JobGraph 在 StreamGraph 基础上进行了一些优化,比如把一部分操作串成 chain 以提高效率
3、ExecutionGraph 是为了调度存在的,加入了并行处理的概念
4、物理执行结构:真正执行的是 Task 及其相关结构

总结:Flink 的四层图概念:

1、StreamGraph 就是通过用户编写程序时指定的算子进行逻辑拼接的
简单说:就是进行算子拼接
2、JobGraph 其实就是在 StreamGraph 的基础之上做了一定的优化,然后生成的逻辑执行图
简单说:就是把能 优化拼接在一起,放在一个 Task 中执行的算子的整合和优化 chain 在一起形成 OperatorChain,类似于 Spark Stage 切分
3、ExecutionGraph 再把 JobGraph 进行并行化生成 ExecutionGraph
简单说:其实 ExecutionGraph 就是 JobGraph 的并行化版本
4、物理执行图 其实是 ExecutionGraph 调度运行之后形成的分布,当一个 Flink Stream Job 中的所有的 Task 都被调度执行起来了之后的状态
简单说:就是最终运行状态图

两个重要的转化:

1、StreamGraph 转变成 JobGraph:把上下游两个相邻算子如果能 chain 到一起,则 chain 到一起做优化
2、JobGraph 转变成 ExecutionGraph: chain 到一起的多个 Operator 就会组成一个 OperatorChain,当 OperatorChain 执行的时候,到底要执行多少个Task,则就需要把 DAG 进行并行化变成实实在在的 Task 来调度执行

补充一张图:Flink job 提交流程

在这里插入图片描述



声明:
        文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。


By luoyepiaoxue2014

B站: https://space.bilibili.com/1523287361 点击打开链接
微博地址: http://weibo.com/luoyepiaoxue2014 点击打开链接


http://www.ppmy.cn/news/2354.html

相关文章

数据库主从复制,读写分离,分库分表理解 (数据库架构演变)

主从复制 主从复制, 主要是针对MySQL数据库的高可用性, 容灾性上面. 是叫做高可用性? 高可用性可以简单的理解为容灾性, 稳定性, 针对故障,风险情况下的处理, 备案, 策略. 指系统无中断地执行其功能的能力,代表系统的可用性程度 高可用性通常…

Python操作Excel表格

本文介绍如何通过轻量级、零依赖(仅使用标准库)的 pylightxl 库操作Excel表格。 官网:Welcome to pylightxl documentation — pylightxl 2019 documentation 目录 一、入门 1. 读写CSV文件 2. 读Excel文件 3. 获取工作表和单元格数据 3…

MQ高级(二)死信交换机

一、初识死信交换机(P159) 当一个队列中的消息满足下列情况之一时,可以成为死信(dead letter): (1)消费者使用basic.reject或 basic.nack声明消费失败,并且消息的requeue…

ccf寻宝!大冒险!python满分(敲开心~)

寻宝 大冒险 题目传送:http://118.190.20.162/view.page?gpidT147 思路及代码: 核心点就是哈希。 之前刷的是70分,找不到之前的代码了,大概是建了一个很大的表,然后一点点比较吧。 今天再刷,上来就是…

外贸小白,一直不出单怎么办?

米贸搜今天,试着给新人一些方法和技巧,让你尽快在公司立足! 事实上,规定几个月内下单的公司,往往都是平台有投资,去展会了,有大量营销费用的公司。当然,老板急着收回成本。对于有足…

HCIA OSI参考模型

一、前言 OSI七层模型是我们耳熟能详的,其实没有太多可以说的地方,我这里就按自己的理解做一下汇总。 二、OSI 七层模型 OSI七层模型是由“国际标准化组织”制定的“参考”模型。 1、物理层 实际上就是对网线、光纤等“连接”介质进行规定&#xff…

数组实现单链表和双链表

全文目录😀 数组实现的优势🤔 单链表😕 初始化😕 头插😕 在下标 k 后面插入元素😕 删除下标 k 后面的元素😕 遍历😵‍💫 双链表🤨 初始化🤨 插入&…

什么事Jupyter Notebook?

Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。 简而言之,Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也…