Flink的运行时架构

Flink的运行时架构

  • Dispatcher (分发器,提供UI界面,将作业分发给JobManager)

  • JobManager(作业管理器)

  • TaskManager(任务管理器)

JonManager

每一个Flink应用程序都对应一个JobManager,JobManager是一个控制程序执行的主进程,我们提交的Job就是提交给Jobmanager;

JobManager的主要作用

1.接受需要执行的Flink应用程序,这个程序包括作业图(JobManager)、逻辑数据流图(logic data-flow)、和打包的类、库以及其他依赖资源的jar包;

2.JobManager会将Jobgraph转化成一个物理的可执行的数据流图(ExecutionGraph),这里面就包含了可以执行的任务;

3.JobManager在生成物理执行图之后会向Resourcemanager申请对应的资源(Slot),一旦获取到资源,就会将执行图中的任务派发到不同的TaskManager上去执行,Flink会通过心跳获取任务执行信息,同时负责集群之间的协调通信,比如说checkpoint协调。

TaskManager

Task也是一个单独的JVM进程,Slot的数量决定了taskmanager同时能执行的task的数量

TaskManager的主要作用

1.首先taskmanager会向资源管理器注册自己的Slot;收到资源管理器的指令后,就会提供1个或者多个插槽供job使用;

2.Taskmanager还要向Jobmanager通过心跳传输任务信息,同时还会与其他的taskmanager之间互相交互数据。

资源管理器

Yarn\K8s\Standalone等

Dispatcher

任务分发器,将应用程序APP提交给JoBManager并提供WebUI界面

基于yarn的Job提交流程

1 提交流程图

Flink的运行时架构_第1张图片

2 流程解析

1.客户端上传jar包和配置

2.客户端向ResourceManager提交Job

3.Yarn-ResourceManger会在NodeManager上启动ApplicationMaster(整个程序的驱动进程),此时JobManager就已经启动

4.ApplicationMaster根据提交的配置申请相应的资源(Container)

5.资源申请之后,会在不同的NodeManager上分配Container并启动TaskManager,分配Slot与内存

6.TaskManager启动并向JobManager注册并通过心跳报告信息

7.此时job提交完成.

3 任务调度原理

Flink中是允许子任务共享Slot的,在Slot中其实只是内存的隔离,Cpu是不进行隔离的;

具体调度可以看FlinkJob的执行图

FlinkJob的执行图

StreamGraph -[通过chain将任务进行合并,在Client就生成了]>- JobGraph -[根据并行度划分子任务形成]-> ExecutionGraph ->物理执行图

算子有以下类型

One-to-one(map、filter、flatmap)

redistributing(keyby、groupby、rebalance、broadcast)类似于shuffle

形成jobGraph时的优化技术,将不同的算子任务连接成一个OperatorChain,这个优化有个前提条件:

只有并行度相同、one-to-one操作的算子才能合并成一个chain,关于chain的算子也有相关的操作

disableChaining():禁止当前算子与前后算子形成chain

startNewChain():这个算子与后续算子形成chain,与前面的算子进行隔离划分

你可能感兴趣的:(Flink)