一、简介
Flink中每一个worker(TaskManager)都是一个JVM进程,它可能会在独立的线程(Solt)上执行一个或多个 subtask。Flink 的每个 TaskManager 为集群提供 Solt。Solt 的数量通常与每个 TaskManager 节点的可用 CPU 内核数成比例,一般情况下 Slot 的数量就是每个节点的 CPU 的核数。
Slot的数量由集群中flink-conf.yaml配置文件中设 置taskmanager.numberOfTaskSlots 的值为 3,这个值的大小建议和节点 CPU 的数量保持一致。
![](https://i-blog.csdnimg.cn/blog_migrate/10f250ad218eece5b2d3c44a8b024c9a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/75c4d704088c422e508f6da8b3e7d596.png)
一个任务的并行度设置可以从 4 个层面指定:
Operator Level(算子层面)。
Execution Environment Level(执行环境层面)。
Client Level(客户端层面)。
System Level(系统层面)。
优 先 级 :Operator Level>Execution Environment Level>Client Level>System Level。
1、
并行度设置之
Operator Level
Operator、Source 和 Sink 目的地的并行度可以通过调用 setParallelism()方法来指定
2、
行度设置之
Execution Environment Level
任务的默认并行度可以通过调用 setParallelism()方法指定。为了以并行度 3 来执行所有的 Operator、Source 和 Sink,可以通过如下方式设置执行环境的并行度
![](https://i-blog.csdnimg.cn/blog_migrate/c90cf01ef30b018b26569970a778ef04.jpeg)
3、
并行度设置之
Client Level
并行度还可以在客户端提交 Job 到 Flink 时设定。对于 CLI 客户端,可以通过-p 参数
30指定并行度
命令:flink run -p xxx.jar
![](https://i-blog.csdnimg.cn/blog_migrate/30735a32aa72715e9e672ac3e8c351b3.png)
4、
并行度设置之
System Level
在系统级可以通过设置flink-conf.yaml文件中的parallelism.default属性来指定所有执行环境的默认并行度。
![](https://i-blog.csdnimg.cn/blog_migrate/baccac765d9a41050273004153b175ab.png)
5、案例分析(如下图)
Flink
集群中有
3
个
TaskManager
节点,每个
TaskManager
的
Slot
数量为
3
![](https://i-blog.csdnimg.cn/blog_migrate/c4de1ccf7f162328fb939b12e6de1a17.png)
Example1 :
在fink-conf.yaml中 taskmanager.numberOfTaskSlots 默认值为1,即每个Task Manager上只有一个Slot ,此处是3
Example中,WordCount程序设置了并行度为1,意味着程序 Source、Reduce、Sink在一个Slot中,占用一个Slot
Example2 :
设置并行度为2后,占用2个Slot
Example3 :
设置并行度为9,占用9个Slot
Example4 :
设置并行度为9,并且设置sink的并行度为1,则Source、Reduce将占用9个Slot,但是Sink只占用1个Slot
感悟:
我们要深信:今日的失败,都由于过去的不努力。我们要深信:今日的努力,必定有将来的大收成。