文章目录

  • JobManger
  • TaskManager
  • TaskSlots
  • Client



flink 如何设置taskmanager数量 flink的taskmanager_linux

上图,是我们Flink-WEB-UI 一部分截图

Flink 系统主要由两个组件组成,分别为 JobManagerTaskManager,Flink 架构遵循了 Master - Slave 架构设计原则,JobManager 为 Master 节点,TaskManagerWorker (Slave)节点。

flink 如何设置taskmanager数量 flink的taskmanager_分布式_02

Flink 在运行时,从分工上来说,又有着三种角色:JobManager、TaskManager、Client。


JobManger

JobManager :负责整个 Flink 集群任务的调度以及资源的管理从客户端中接收作业

>>>>>>>>

详细解释:客户端通过将编写好的 Flink 应用编译打包,提交到 JobManager,JobManger根据集群TaskManager 上 TaskSlot 的使用情况,为提交的应用分配相应的 TaskSlot 资源并命令 TaskManager 启动与执行从客户端中获取的作业;JobManger还负责协调Checkpoint 操作,每个 TaskManager 节点 收到 Checkpoint 触发指令后,完成 Checkpoint 操作,所有的 Checkpoint 协调过程都是在 Fink JobManager 中完成。


TaskManager

TaskManager: 负责具体的任务执行和任务资源申请和管理

>>>>>>>>

详细解释:TaskManger从 JobManager 接收需要执行的任务,然后申请Slot 资源(根据集群Slot使用情况以及并行度设置)并尝试启动Task,开始执行作业,TaskManager中最小的资源调度单位是TaskSlots。TaskManger数量由集群中Slave数量决定


TaskSlots

TaskSlots:Task共享系统资源(内存);TaskManger并发执行能力决定性因素。

**>>>>>>>>

详细解释:TaskSlots:TaskManager 是一个 JVM 进程,是实际负责执行计算的Worker,会以独立的线程来执行一个task或多个subtask。为了控制一个 TaskManager 能执行多少个 task,Flink 提出了 Task Slot 的概念

flink 如何设置taskmanager数量 flink的taskmanager_flink_03

(1)Task之间通过 TaskSlot 方式共享系统资源(内存),TaskSlots也决定TaskManger并发执行能力。

(2)每个TaskSlot代表TaskManager资源不同分割。例如,具有三个插槽的TaskManager会将其内存的1/3平均分配到每个TaskSlot。分配资源意味着子任务不会与其他作业的子任务竞争内存,而是具有一定数量的保留托管内存。需要注意的是,此处没有对CPU进行隔离。当前TaskSlot仅将任务的内存进行隔离,简言之,即每个TaskSlot持有部分TaskManger内存,同一个作业下的task/subtask可共享TaskSlot

flink 如何设置taskmanager数量 flink的taskmanager_linux_04

TaskSlot仅在属性为可用状态(Available)时才可被分配。

TaskSlot默认为1,可在Flink-conf.yml配置文件中进行更改

flink 如何设置taskmanager数量 flink的taskmanager_java_05

注意点:一个具体的TaskSlot仅可服务于一个Job

例如,我现在集群中只有一个TaskSlot,但是我启动了两个Job,第二个Job启动时,则会进行SCHEDULED 状态,等待集群为该job申请Slot资源

flink 如何设置taskmanager数量 flink的taskmanager_大数据_06

第二个Job进入SCHEDULED状态,等待资源申请

flink 如何设置taskmanager数量 flink的taskmanager_分布式_07

flink 如何设置taskmanager数量 flink的taskmanager_flink_08

此状态会一直持续五分钟,五分钟后仍未申请到Slot资源,则此JOb会失败

flink 如何设置taskmanager数量 flink的taskmanager_java_09

flink 如何设置taskmanager数量 flink的taskmanager_分布式_10

TaskSlot默认为1,可在Flink-conf.yml配置文件中进行更改

flink 如何设置taskmanager数量 flink的taskmanager_分布式_11

flink 如何设置taskmanager数量 flink的taskmanager_java_12

TaskSlot一般设置为服务器核心数或者核心数/2 的数量,如有多个服务器,尽可能保证所有服务器TaskSlot数量一致

Flink集群运行时TaskSlot数量= 每个Flink集群节点服务器设置TaskSlot之和,如果节点TaskSlot一致,则为TaskManger num * TaskSlot num


Client

Client:Flink程序提交的客户端

>>>>>>>>>>

Client是Flink程序提交的客户端,当用户提交一个Flink程序时,会首先创建一个Client,该Client首先会对用户提交的Flink程序进行预处理,并提交到Flink集群中处理。正因为其需要提交到Flink集群,所以Client需要从用户提交的Flink程序配置中获取JobManager的地址,并建立到JobManager的连接,将Flink Job提交给JobManager。