flink的架构

Posted hdc520

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flink的架构相关的知识,希望对你有一定的参考价值。

(1)flink的任务提交流程(无Dispatcher提交)

  1、client向yarn提交application后,同时向HDFS上传flink的Jar包和配置。ResourceManager为application分配Container资源并通知对应的NodeManager启动ApplicationMaster。

  2、ApplicationMaster启动后加载Flink的Jar包和配置,构建环境以启动JobManager。JobManager首先接收应用程序的相关资源如jobgraph,会将JobGraph转换成物理层面的数据流图ExecutionGragh。

  4、JobManager向ResourceManager申请Container启动TaskManager,ResourceManager分配Container资源后,通知资源所在节点的NodeManager启动TaskManager。

  5、NodeManager加载Flink的Jar包和配置构建环境并启动TaskManager,每个TaskManager都包含一定数量的插槽slots,插槽的数量限制了TaskManager能够执行的任务数量。

  6、TaskManager会向ResoureManger注册它的插槽,收到ResourceManger的指令后,TaskManager就会将若干个插槽提供个JobManager调用,JobManager就可以向插槽分配任务(tasks)来执行。

  注意:一个nodemanager可以有多个TaskManager的,每个container都会有一个TaskManager。

(2)flink中各个组件的作用

  1、JobManager:Flink系统的协调者,它负责接收Flink Job,并负责调度Task的执行。同时JobManager还负责收集Job的状态信息,并管理Flink集群中的从节点TaskManager。

  2、TaskManager:从 Job Manager 处接收需要部署的 Task。负责管理其所在节点上的资源信息,如内存、磁盘、网络,在启动的时候将资源的状态向JobManager汇报。

  3、client:Client 不是 Flink 程序执行的内部部分,但它是任务执行的起点。Client 负责接受用户的程序代码,然后创建数据流,将数据流提交给JobManager以便进一步执行。执行完成后,Job Client 将结果返回给用户。

  4、Slot :理解为是资源的最小管理单位,它是TaskManager资源的一个子集。通过slot,flink将资源进行有效的划分和管理。flink中允许一个任务的不同子任务共享同一个slot,也允许不同任务的不同子任务共享同一个slot,前提是这些子任务不属于同一种操作类型的任务。通过slot共享,能够让资源密集型子任务(Source,Map)和资源密集型子任务(KeyBy/Window/Apply)能够充分利用资源,避免闲的闲死,忙的忙死。

(3)flink的执行图

  1、StreamGraph:根据用户通过 Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构。

  2、JobGraph:StreamGraph经过优化后生成了 JobGraph,提交给 JobManager 的数据结构。主要的优化为,将多个符合条件的节点 chain 在一起作为一个节点,这样可以减少数据在节点之间流动所需要的序列化/反序列化/传输消耗。

  3、ExecutionGraph:JobManager 根据 JobGraph 生成ExecutionGraph。ExecutionGraph是JobGraph的并行化版本,是调度层最核心的数据结构。

  4、物理执行图:JobManager 根据 ExecutionGraph 对 Job 进行调度后,在各个TaskManager 上部署 Task 后形成的“图”,并不是一个具体的数据结构。

技术图片

 

 

 

 

以上是关于flink的架构的主要内容,如果未能解决你的问题,请参考以下文章

Flink入门——Flink架构介绍

Flink架构、原理

Flink架构和调度

Flink运行架构剖析

Flink集群架构

Apache Flink快速入门-基本架构、核心概念和运行流程