一、简介
Flink中每一个worker(TaskManager)都是一个JVM进程,它可能会在独立的线程(Solt)上执行一个或多个 subtask。Flink 的每个 TaskManager 为集群提供 Solt。Solt 的数量通常与每个 TaskManager 节点的可用 CPU 内核数成比例,一般情况下 Slot 的数量就是每个节点的 CPU 的核数。 Slot的数量由集群中flink-conf.yaml配置文件中设 置taskmanager.numberOfTaskSlots 的值为 3,这个值的大小建议和节点 CPU 的数量保持一致。
一个任务的并行度设置可以从 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,可以通过如下方式设置执行环境的并行度
3、 并行度设置之 Client Level
并行度还可以在客户端提交 Job 到 Flink 时设定。对于 CLI 客户端,可以通过-p 参数 30指定并行度
命令:flink run -p xxx.jar
4、 并行度设置之 System Level
在系统级可以通过设置flink-conf.yaml文件中的parallelism.default属性来指定所有执行环境的默认并行度。
5、案例分析(如下图)
Flink 集群中有 3 个 TaskManager 节点,每个 TaskManager 的 Slot 数量为 3
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
感悟:
我们要深信:今日的失败,都由于过去的不努力。我们要深信:今日的努力,必定有将来的大收成。