赞
踩
上图,是我们Flink-WEB-UI
一部分截图
Flink 系统主要由两个组件组成,分别为 JobManager
和 TaskManager
,Flink 架构遵循了 Master - Slave
架构设计原则,JobManager
为 Master 节点,TaskManager
为 Worker (Slave)
节点。
Flink 在运行时,从分工上来说,又有着三种角色:JobManager、TaskManager、Client。
JobManager :负责整个 Flink 集群任务的调度以及资源的管理从客户端中接收作业
>>>>>>>>
详细解释:客户端通过将编写好的 Flink 应用编译打包,提交到 JobManager,JobManger根据集群TaskManager 上 TaskSlot 的使用情况,为提交的应用分配相应的 TaskSlot 资源并命令 TaskManager 启动与执行从客户端中获取的作业;JobManger还负责协调Checkpoint 操作,每个 TaskManager 节点 收到 Checkpoint 触发指令后,完成 Checkpoint 操作,所有的 Checkpoint 协调过程都是在 Fink JobManager 中完成。
TaskManager: 负责具体的任务执行和任务资源申请和管理
>>>>>>>>
详细解释:TaskManger从 JobManager 接收需要执行的任务,然后申请Slot 资源(根据集群Slot使用情况以及并行度设置)并尝试启动Task,开始执行作业,TaskManager中最小的资源调度单位是TaskSlots。TaskManger数量由集群中Slave数量决定
TaskSlots:Task共享系统资源(内存);TaskManger并发执行能力决定性因素。
**>>>>>>>> **
详细解释:TaskSlots:TaskManager 是一个 JVM 进程,是实际负责执行计算的Worker,会以独立的线程来执行一个task或多个subtask。为了控制一个 TaskManager 能执行多少个 task,Flink 提出了 Task Slot 的概念
(1)Task之间通过 TaskSlot 方式共享系统资源(内存),TaskSlots也决定TaskManger并发执行能力。
(2)每个TaskSlot代表TaskManager资源不同分割。例如,具有三个插槽的TaskManager会将其内存的1/3平均分配到每个TaskSlot。分配资源意味着子任务不会与其他作业的子任务竞争内存,而是具有一定数量的保留托管内存。需要注意的是,此处没有对CPU进行隔离。当前TaskSlot仅将任务的内存进行隔离,简言之,即每个TaskSlot持有部分TaskManger内存,同一个作业下的task/subtask可共享TaskSlot
TaskSlot仅在属性为可用状态(Available
)时才可被分配。
TaskSlot默认为1,可在Flink-conf.yml配置文件中进行更改
注意点:一个具体的TaskSlot仅可服务于一个Job
例如,我现在集群中只有一个TaskSlot,但是我启动了两个Job,第二个Job启动时,则会进行SCHEDULED
状态,等待集群为该job申请Slot资源
第二个Job进入SCHEDULED
状态,等待资源申请
此状态会一直持续五分钟,五分钟后仍未申请到Slot资源,则此JOb会失败
TaskSlot默认为1,可在Flink-conf.yml配置文件中进行更改
TaskSlot一般设置为服务器核心数或者核心数/2 的数量,如有多个服务器,尽可能保证所有服务器TaskSlot数量一致
Flink集群运行时TaskSlot数量= 每个Flink集群节点服务器设置TaskSlot之和,如果节点TaskSlot一致,则为TaskManger num * TaskSlot num
Client:Flink程序提交的客户端
>>>>>>>>>>
Client是Flink程序提交的客户端,当用户提交一个Flink程序时,会首先创建一个Client,该Client首先会对用户提交的Flink程序进行预处理,并提交到Flink集群中处理。正因为其需要提交到Flink集群,所以Client需要从用户提交的Flink程序配置中获取JobManager的地址,并建立到JobManager的连接,将Flink Job提交给JobManager。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。