李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
09.Flink任务调度原理
Leefs
2021-12-30 PM
885℃
0条
[TOC] ### 一、任务调度原理 ![09.Flink任务调度原理01.png](https://lilinchao.com/usr/uploads/2021/12/4052452749.png) + 客户端不是运行时和程序执行的一部分 , 但它用于准备并发送dataflow(JobGraph)给 Master(JobManager),然后,客户端断开连接或者维持连接以等待接收计算结果。 + 当Flink集群启动后,**首先会启动一个JobManger和一个或多个的TaskManager**。由Client提交任务给JobManager,JobManager再调度任务到各个TaskManager去执行,然后TaskManager将心跳和统计信息汇报给JobManager。TaskManager之间以流的形式进行数据的传输。上述三者均为独立的 JVM 进程。 + **Client**为提交Job的客户端,可以是运行在任何机器上( 与 JobManager环境连通即可)。提交 Job 后, Client 可以结束进程( Streaming 的任务),也可以不结束并等待结果返回。 + **JobManager**主要负责调度Job并协调Task做checkpoint(职责上很像Storm的Nimbus)。从Client处接收到Job和JAR包等资源后,会生成优化后的执行计划,并以Task的单元调度到各个TaskManager去执行。 + **TaskManager**在启动的时候就设置好了槽位数(Slot),每个slot能启动一个Task,Task为线程。从JobManager处接收需要部署的Task,部署启动后,与自己的上游建立Netty连接,接收数据并处理。 ### 二、TaskManager与Slots + Flink中每一个worker(TaskManager)都是一个JVM进程,它可能会在独立的线程上执行一个或多个subtask。为了控制一个worker能接收多少个task,worker通过task slot来进行控制(一个 worker至少有一个task slot)。 + 每个task slot表示TaskManager拥有资源的**一个固定大小的子集**。 假如一个TaskManager有三个slot,那么它会将其管理的内存分成三份给各个slot。资源slot化意味着一个subtask将不需要跟来自其他job的subtask竞争被管理的内存,取而代之的是它将拥有一定数量的内存储备。 需要注意的是,这里不会涉及到CPU的隔离(CPU是靠抢的),slot目前仅仅用来隔离task的受管理的内存。 + 通过调整task slot的数量,允许用户定义subtask之间如何互相隔离。如果一个TaskManager一个slot,那将意味着每个task group运行在独立的JVM中(该JVM可能是通过一个特定的容器启动的),而一个TaskManager多个slot意味着更多的subtask可以共享同一个JVM。而在同一个JVM进程中的task将共享TCP连接(基于多路复用)和心跳消息。它们也可能共享数据集和数据结构,因此这减少了每个task的负载。 **下图TaskManager与Slot:** ![09.Flink任务调度原理02.png](https://lilinchao.com/usr/uploads/2021/12/3574408744.png) **下图子任务共享Slot:** ![09.Flink任务调度原理03.png](https://lilinchao.com/usr/uploads/2021/12/1967886098.png) + **默认情况下,Flink允许子任务共享slot**,**即使他们是不同任务的子任务(前提是他们来自同一个job)。 这样的结果是,一个slot可以保存作业的整个管道。** + **Task Slot是静态的概念,是指TaskManager具有的并发执行能力**,可以通过参数`taskmanager.numberOfTaskSlots`进行配置:而**并行度parallelism是动态概念**,即**TaskManager运行程序时实际使用的并发能力**,可以通过参数parallelism.default进行配置。 + 也就是说,假设一共有 3个TaskManager,每一个TaskManager中的分配 3个TaskSlot,也就是每个TaskManager可以接收3个task,一共 9个TaskSlot,如果我们设置 `parallelism.default=1`,即运行程序默认的并行度为 1,9 个TaskSlot 只用了 1 个,有 8 个空闲,因此,设置合适的并行度才能提高效率。 ![09.Flink任务调度原理05.png](https://lilinchao.com/usr/uploads/2021/12/151060255.png) ![09.Flink任务调度原理04.png](https://lilinchao.com/usr/uploads/2021/12/2623944328.png) *附文章来源:* *《尚硅谷大数据之flink教程》*
标签:
Flink
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/1813.html
上一篇
08.Flink任务提交流程
下一篇
ELK生命周期管理使用详解
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
43
标签云
Golang
ClickHouse
SQL练习题
MySQL
数据结构
BurpSuite
Azkaban
Java
数据结构和算法
SpringBoot
队列
稀疏数组
Hadoop
Git
链表
MyBatisX
Java工具类
Http
线程池
Elastisearch
Linux
Beego
LeetCode刷题
Shiro
MyBatis-Plus
Filter
GET和POST
Map
Nacos
Jquery
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞