flink原理架构 flink基本工作原理_flink

PS: 这里常说的 Job = 一个应用

Task = 一个任务

总的来讲:

1.Flink应用程序会首先提交给JobClient,做解析和算子链化

2.然后会提交给JobManager,进行资源分配,将任务分给TaskManager

3.TaskManager会启动相应的Slot线程,进行任务处理,在处理过程中会持续向JobManager,返回任务状态(任务开始,进行中,已完成等)

4.任务执行完以后,执行结果会被返回给客户端Client

flink原理架构 flink基本工作原理_应用程序_02

 

1.基本原理

主要采用主从节点架构,即master 和work 节点
分为两部分:JobManage(master节点)r和 TaskManager(work节点)

flink原理架构 flink基本工作原理_flink_03

flink原理架构 flink基本工作原理_学习_04

 1.1 jobClient 节点

JobClient主要是负责接收应用程序,并解析和优化执行计划,然后提交执行计划到JobManager.

这里的优化执行主要是将相临的算子进行融合,形成算子链,减少任务数量,提高JobManager中Task的资源利用率。

flink原理架构 flink基本工作原理_应用程序_05

1.2 JobManager

JobManager负责Flink整个集群的调度以及资源的管理。

1.分配资源

从JobClient 接收任务,然后根据TaskManager中task slot的使用情况,为提交的应用分配相应的slot资源,并命令TaskManager启动从Client中获取的应用。

2.高可用机制

另外为了保障高可用,一般会有多个JobManager 同时存在,多个JobManager节点也是采取主从模式,选举出一个主节点工作,其他几个从节点会闲置。当主节点挂掉后,会从剩余的从节点中选举出新的节点,作为主节点。

3.容错

检查点机制

flink原理架构 flink基本工作原理_应用程序_06

 

1.3 TaskManager

负责具体的任务执行,和对应任务,在每个节点上的资源申请与管理。

TaskManager从JobManager接收并部署任务,然后使用slot资源来启动task,建立数据库网络的链接,接收数据并开始做数据处理。

 TaskManager之间的数据交互都是通过数据流的方式进行的。

flink原理架构 flink基本工作原理_flink原理架构_07

 

1.4 Slot

Slot是TaskManager的资源粒度划分

每个TaskManager 像一个容器,包含一个多个slot,每个slot都有自己独立的内存,所有slot平均分配整个TaskManager 的内存。

另外,slot只划分内存,不涉及cpu的划分,CPU是共享使用的。

一个slot会运行多个任务,每个任务以单独的线程执行。

flink原理架构 flink基本工作原理_flink原理架构_08

 

采用slot设计的优势:

flink原理架构 flink基本工作原理_应用程序_09

 

1.5 task

是在算子的子任务进行链化之后形成的。

一个作业中的task数量,和作业中算子的并行度和链化的策略有关。

flink原理架构 flink基本工作原理_flink_10