【Flink-1.17-教程】-【三】Flink 运行架构、Flink 核心概念【并行度、算子链、任务槽】、Flink 作业提交流程

1)系统架构

在这里插入图片描述

1.1.系统成员组成

1、作业管理器(JobManager

JobManager 是一个 Flink 集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用都应该被唯一的 JobManager 所控制执行。JobManger 又包含 3 个不同的组件。

(1)JobMaster

JobMasterJobManager 中最核心的组件,负责处理单独的作业(Job)。所以 JobMaster和具体的 Job 是一一对应的,多个 Job 可以同时运行在一个 Flink 集群中, 每个 Job 都有一个自己的 JobMaster。需要注意在早期版本的 Flink 中,没有 JobMaster 的概念;而 JobManager的概念范围较小,实际指的就是现在所说的 JobMaster

在作业提交时,JobMaster 会先接收到要执行的应用。JobMaster 会把 JobGraph 转换成一个物理层面的数据流图,这个图被叫作“执行图”(ExecutionGraph),它包含了所有可以并发执行的任务。JobMaster 会向资源管理器(ResourceManager)发出请求,申请执行任务必要的资源。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的 TaskManager上。

而在运行过程中 , JobMaster 会负责所有需要中央协调的操作 , 比如说检查点(checkpoints)的协调。

(2)资源管理器(ResourceManager

ResourceManager 主要负责资源的分配和管理,在 Flink 集群中只有一个。所谓“资源”,主要是指 TaskManager 的任务槽(task slots)。任务槽就是 Flink 集群中的资源调配单元,包含了机器用来执行计算的一组 CPU 和内存资源。每一个任务(Task)都需要分配到一个 slot上执行。

这里注意要把 Flink 内置的 ResourceManager 和其他资源管理平台(比如 YARN)的ResourceManager 区分开。

(3)分发器(Dispatcher

Dispatcher 主要负责提供一个 REST 接口,用来提交应用,并且负责为每一个新提交的作业启动一个新的 JobMaster 组件。Dispatcher 也会启动一个 Web UI,用来方便地展示和监控作业执行的信息。Dispatcher 在架构中并不是必需的,在不同的部署模式下可能会被忽略掉。

2、任务管理器(TaskManager

TaskManagerFlink 中的工作进程,数据流的具体计算就是它来做的。Flink 集群中必须至少有一个 TaskManager;每一个 TaskManager 都包含了一定数量的任务槽(task slots)。

Slot 是资源调度的最小单位,slot 的数量限制了 TaskManager 能够并行处理的任务数量。

启动之后,TaskManager 会向资源管理器注册它的 slots;收到资源管理器的指令后,TaskManager 就会将一个或者多个槽位提供给 JobMaster 调用,JobMaster 就可以分配任务来执行了。

在执行过程中,TaskManager 可以缓冲数据,还可以跟其他运行同一应用的 TaskManager
交换数据。

1.2.作业提交流程

在这里插入图片描述

1、提交 job,执行运行程序的脚本(flink run)后,会生启动一个客户端进程。

2、客户端进程中会解析一些参数,如:-c(全类名)

3、对解析完成的参数进行封装,然后通过内部的 Actor 通信系统(基于 RPC)提交、或取消(flink cancel)、或更新,将任务发送给 JobManager。

4、JobManager 自身也会有一个 Actor 通信系统,通过 Actor 通信系统拿到任务后。

5、分发器启动,并提交具体应用给作业管理者 JobMaster(JobManager 是进程,JobMaster 是线程)。

6、JobMaster 根据作业参数情况向资源管理器请求资源(slot)。

7、资源管理器通过 Actor 通信系统,向 TaskManager 申请资源(task slot)

8、TaskManager 提供资源(task slot)给到 JobMaster,也就是通知 JobMaster 可以提供任务给 TaskManager 了。

9、JobMaster 将任务分发到各个 task slot 中,开始执行任务。

10、JobManager 将状态更新、计算结果返回给客户端。

注意:一个 job 对应一个 JobMaster(多线程),分发器和资源管理器只有一个。

2)核心概念

2.1. 并行度(Parallelism)

在这里插入图片描述

2.1.1.并行子任务和并行度

当要处理的数据量非常大时,我们可以把一个算子操作,“复制”多份到多个节点,数据来了之后就可以到其中任意一个执行。这样一来,一个算子任务就被拆分成了多个并行的“子任务”(subtasks),再将它们分发到不同节点,就真正实现了并行计算。

Flink 执行过程中,每一个算子(operator)可以包含一个或多个子任务(operatorsubtask),这些子任务在不同的线程、不同的物理机或不同的容器中完全独立地执行。

一个特定算子的子任务(subtask)的个数被称之为其并行度ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值