TaskManager 和 Slot
每个 TaskManager 中都会有一到多个 solt。 solt 的数量通常与每个 TaskManager 节点的可用 CPU 内核数成比例。一般情况下你的 slot 数是你每个节点的 cpu 的核数。
Slot 是进程,如果使用 Flink on Yarn 模式不需要考虑资源的配置。
并行度 (Parallel)
一个 Flink 程序由多个任务(source、transformation sink)组成。 一个任务由多个并行的实例 (线程) 来执行, 一个任务的并行实例 (线程) 数目就被称为该任务的并行度。
并行度 (Parallel) 的设置
一个任务的并行度设置可以从多个层次指定
- Operator Level(算子层次)
- Execution Environment Level(执行环境层次)
- Client Level(客户端层次)
- System Level(系统层次)
Operator Level(算子层面)
一个算子、数据源和 sink 的并行度可以通过调用 setParallelism ()
方法来指定
Execution Environment Level(执行环境层面)
执行环境 (任务) 的默认并行度可以通过调用 setParallelism ()
方法指定。
通过这种方法指定时,所有的算子、数据源和 data sink 的并行度都相同
当然,执行环境的并行度可以通过显式设置算子的并行度而被重写
Client Level
并行度可以在客户端将 job 提交到 Flink 时设定。对于 CLI 客户端,可以通过 - p
参数指定并行度
./bin/flink run -p 10 WordCount-java.jar
System Level(尽量不使用)
在系统级可以通过设置 flink-conf.yaml
文件中的 parallelism.default
属性来指定所有执行环境的默认并行度
并行度图解
Example1 :
解释:
- 在
fink-conf.yaml
中taskmanager.numberOfTaskSlots
默认值为 1,即每个 Task Manager 上只有一个 Slot ,此处是 3 - Example1 中,WordCount 程序设置了并行度为 1,意味着程序
Source
、Reduce
、Sink
都只有一个实例,只占用一个 Slot
Example2 : 解释:设置并行度为 2 后,将占用 2 个 Slot
Example3 :
解释:设置并行度为 9,将占用 9 个 Slot
Example4 :
解释:
- 通过设置并行度为 9,并且设置
sink
的并行度为 1,则Source
、Reduce
将存在9个实例,但是Sink
只存在一个实例
总结
从上面的例子中我们可以看出
- 算子的并行度不能超过集群中 Slot
- 一个 Slot 中可以有不同种类的算子
- 同种类的算子只能跑在不同的 Slot 中