Flink内核源码
- 1、掌握Flink应用程序抽象
- 2、掌握Flink核心组件整体架构抽象
- 3、掌握Flink Job三种运行模式
- 4、理解Flink RPC网络通信框架Akka详解
- 5、理解TaskManager为例子,分析Flink封装Akka Actor的方法和整个调用流程
- 6、理解Flink高可用服务HighAvailabilityServices
- 7、理解Flink选举服务LeaderElectionService和监听LeaderRetrievalService机制
- 8、理解Flink文件/大对象服务BlobService
- 9、理解Flink心跳机制HeartbeatServices
总的来说,先了解清楚Flink的一些重要工作和通信机制,然后再去剖析一个Flink Job 到底是如何执行的,Flink的 Cluster到底是如何管理和分配slot资源的等等,就比较容易了。
1、Flink应用程序抽象
Flink 的整体架构设计


概念解释:
- Dataflow Graph:是一个逻辑上的概念,表示这个应用程序的执行图,在客户端中会生成两张图:
StreamGraph+JobGraph:- StreamGraph中有两个非常重要的概念:StreamNode(operation算子) + StreamEdge(连续两个算子的边)
- JobGraph
final JobGraph jobGraph = PipelineExecutorUtils.getJobGraph(pipeline, configuration);
- client 是一个Http方式的Restful Client,负责将JobGraph递交到JobMaster
- JobManager接收到JobGraph后,会做一些非常重要的操作,启动 jobMaster,jobMaster负责该job的执行,也就是一个jobMaster对应一个JobGraph,在构造JobMaster时候,会把JobGraph构造成ExecutionGraph
- Execution = ExecutionVertex(顶点) (里面有一个抽象表示一个Task的一切信息)
- JobMaster接下来会向ResourceManager (并不是Yarn的ResourceManager而是JobManager组件) 申请资源,申请slot资源,部署task启动执行
- 当所有的task都部署到taskManager里面以后,启动完成了,上下游的task都建立了连接,最终组成PhysicalGraph (物理执行图)
Flink的一个Job,最终归根结底,还是构建一个高效率的能用于分布式并行执行的DAG执行图。
Flink的执行图可以分为四层:StreamGraph ===> JobGraph ===> ExecutionGraph ===> PhysicalGraph (物理执行图)
- StreamGraph:是根据用户通过Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构。ds.xx1.xx2.xx3.xx4(),ds1.join(ds2)
- JobGraph:StreamGraph经过优化后生成了 JobGraph,提交给 JobManager的数据结构。主要的优化为:将多个符合条件的节点 chain在一起作为一个节点,这样可以减少数据在节点之间流动所需要的序列化反序列化传输消耗。
- ExecutionGraph:JobManager根据JobGraph生成ExecutionGraph。ExecutionGraph 是JobGraph的并行化版本,是调度层最核心的数据结构。
- PhysicalGraph (物理执行图):JobM

本文深入解析Flink内核,涵盖Flink应用程序抽象的四层图结构,核心组件如JobManager、ResourceManager和TaskManager的职责,以及Flink Job的三种运行模式。Flink使用Akka进行节点间通信,实现高效的数据流处理。
最低0.47元/天 解锁文章
205

被折叠的 条评论
为什么被折叠?



