本文图片来源网络,侵删
并行度( Parallelism)
-
一个特定算子的子任务( subtask)的个数被称之为其并行度( parallelism)。 一般情况下,一个 stream的并行度,可以认为就是其所有算子中最大的并行度。
TaskManager 和 Slots
-
Flink 中每一个TaskManager都是一个JVM进程,它可能会在独立的线程上执行一个或多个子任务
-
为了控制一个TaskManager能接收多少个 task, TaskManager 通过 task slot 来进行控制(一个TaskManager至少有一个 slot)
-
正常排列分配:如下图一样竖着排,用两个Task Slot搞定。
-
实现上图分配(竖置转为横置):设置Slot共享组,每个算子后边都可以追加(和单独设置并行度一样).slotSharingGroup("1"),不同的共享组的操作不可能在同一个Task Slot里,没有设置则默认和前一个操作的共享组一致,第一个操作的共享组默认是default,此时所需的slot数量不再是等于最大并行度了,而是叠加各组的最大并行度。
-
默认情况下, Flink 允许子任务共享 slot, 即使它们是不同任务的子任务。 这样的结果是,一个 slot 可以保存作业的整个管道(pineline)。
-
Task Slot 是静态的概念,是指 TaskManager 具有的并发执行能力
并行子任务的分配
有A和C两个输入流,二者虽然是不同的流,但仍然能共享一个slot