李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
09.Flink任务调度原理
Leefs
2021-12-30 PM
1185℃
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://lilinchao.com/archives/1813.html
上一篇
08.Flink任务提交流程
下一篇
ELK生命周期管理使用详解
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Tomcat
并发编程
SQL练习题
微服务
Yarn
Beego
栈
MyBatis-Plus
Golang
Linux
容器深入研究
FileBeat
Livy
二叉树
Map
Java工具类
Typora
Spark RDD
Http
JVM
MyBatis
Java编程思想
国产数据库改造
Shiro
Flume
Elasticsearch
锁
Nacos
排序
Hive
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭