Flink运行架构之对Flink中的Slot概念的理解

在讲Slot之前建议先看上文https://blog.csdn.net/weixin_44080445/article/details/120008414

翻译官网可以得到如下内容

Flink运行架构之对Flink中的Slot概念的理解_第1张图片

1.Flink中每一个worker(TaskManager)都是一个JVM进程,它可能会在独立的线程上执行一个Task。为了控制一个worker能接收多少个task(这里的task可以理解为上文里面经过合并后subtask的数量),worker通过Task Slot来进行控制(一个worker至少有一个Task Slot)。

2.每个task slot表示TaskManager拥有资源的一个固定大小的子集。假如一个TaskManager有三个slot,那么它会将其管理的内存分成三份给各个slot。资源slot化意味着一个task将不需要跟来自其他job的task竞争被管理的内存,取而代之的是它将拥有一定数量的内存储备。需要注意的是,这里不会涉及到CPU的隔离,slot目前仅仅用来隔离task的受管理的内存。

3.Flink中slot数量代表了所有最高能支持的subtask数量。也就是整个任务的最高并发度,但是并不代表一个线程的概念(可见上图),内部也是可以启动很多线程的。

4.每一个任务的并行能力是多少就是靠着slot的数量来看的(可见上文WC中各个算子并行度举的例子)

5.关于flink配置文件flink-conf.yaml中的taskmanager.numberOfTaskSlots和parallelism.default
Flink运行架构之对Flink中的Slot概念的理解_第2张图片

  • 默认taskmanager.numberOfTaskSlots=1, numberOfTaskSlots指的是每个TM上有多少slots。也即是TM所拥有的最大并行能力,默认为1,可以手动配置更改。

  • parallelism.default 为默认并行度,默认为1,指的是job提交时默认的并行度是多少,简单理解就是一个是动态的能力 ,而taskmanager.numberOfTaskSlots参数则是提交job执行时静态的能力 ,就像我有10成功力(taskmanager.numberOfTaskSlots),用3成功力(parallelism.default )就可以使出铁砂掌kill掉一个对手,那我非要用10成功力干嘛呢,但是如果对面是3个对手,这时不免要使用全部的10成功力来出招。

6.关于Slot的数量问题.

Flink运行架构之对Flink中的Slot概念的理解_第3张图片

图中有13个任务,由于各个算子都没有设置共享组,故所有的任务都是属于同一个组(default)的,所需要的slots的数量就是看最大并行度,图中最大并行度为6,所以就需要6个slot。

在这里插入图片描述
上述所示默认也是没有设置共享组,所以需要的slot数量就是最大并行度2.

7.在以shell的方式提交flink job的时候,可以使用-p指定程序的并行度,这里的-p参数加上过后所替代的就是上述的parallelism.default的值

./bin/flink run -p 10 xxx.jar

8.算子并行度优先级问题
并行度设置优先级:代码中各个算子设置并行度 > 代码中env设置全局并行度 > FlinkWeb页面设置的并行度 > flink-conf.yaml配置文件默认并行度

你可能感兴趣的:(Flink,flink)