介绍
每一个worker(TaskManager)为了控制能接受多少个Task,worker会通过task slot来进行控制,一个worker至少有一个task slot,那么怎么处理呢?
一、相关概念
-
1、Flink中每一个TaskManager都是一个JVM进程,它可能会在独立的线程上执行一个或多个subtask;
-
2、为了控制一个TaskManager能接收多少个task,TaskManager会通过task slot来进行控制,一个TaskManager至少有一个slot。
-
3、每个task solt表示TaskManager拥有资源的一个固定大小的子集,假如一个taskmanager有三个slot,那么它会将其管理的内存分为三个slot,slot仅仅用来隔离task的受管理内存。
-
4、可以通过调整TaskSlot的数量去自定义subtask之间的隔离方式。如果一个TaskManager一个slot时,那么每个task grop运行在独立的JVM中。而当一个TaskManager多个slot时,多个subtask会共享一个JVM,而在同一个JVM进程中的task将共享TCP连接和心跳消息,也可能共享数据集和数据结构,从而减少每个task负载,
二、共享机制
默认情况下,Flink 允许子任务共享 slot,即使它们是不同任务的子任务(前提是它们来自同一个job)。 这样的结果是,一个 slot 可以保存作业的整个管道。
Task Slot 是静态的概念,是指 TaskManager 具有的并发执行能力,可以通过参数taskManager.numberOfTaskSlots进行配置;而并行度parallelism是动态概念,即TaskManager运行程序时实际使用的并发能力,可以通过参数parallelism.default进行配置。
举例:如果总共有3个TaskManager,每一个TaskManager中分配了3个TaskSlot,也就是每个TaskManager可以接收3个task,这样我们总共可以接收9个TaskSot。但是如果我们设置parallelism.default=1,那么当程序运行时9个TaskSlot将只有1个运行,8个都会处于空闲状态,所以要学会合理设置并行度!