并行度(Parallel)

一个Flink程序由多个组件组成(Source、Transformation和 Sink)。 一个组件由多个并行实例(线程)来执行, 一个组件的并行实例(线程)数目就被称为该组件的并行度。

TaskManager与Slot

Flink 整个系统主要由两个组件组成,分别为 JobManager 和 TaskManager,Flink 架构也遵循 Master - Slave 架构设计原则,JobManager 为 Master 节点,TaskManager 为 Worker (Slave)节点。

Flink的每个TaskManager为集群提供Solt, Solt的数量通常与每个TaskManager节点的可用CPU数量成比例,一般情况下Slot的数量就是每个节点的可用CPU数量(逻辑处理器数)。
image.png
image.png

并行度的设置

Flink任务的并行度可以通过4个层面来设置。

  • Operator Level(算子层面)
  • Execution Environment Level(执行环境层面)
  • Client Level(客户端层面)
  • System Level(系统层面)

这些并行度优先级为Operator Level>Execution Environment Level>Client Level>System Level

算子层面

算子、数据源和目的地的并行度可以通过调用setParallelism()方法来指定
image.png

执行环境层面

执行环境层面的并行度可以通过调用setParallelism()方法指定。为了以并行度3来执行所有的算子、数据源和目的地, 可以通过如下的方式设置执行环境的并行度

注意:执行环境的并行度可以通过显式设置算子的并行度而被重写。

image.png

客户端层面

并行度还可以在客户端提交Job时设定。
通过-p参数指定并行度。

  1. bin/flink run -p 10 FlinkDemo.jar

这里表示把并行度设置为10。

系统层面

在系统层面可以通过设置flink-conf.yaml文件中的parallelism.default属性来指定所有执行环境的默认并行度。

并行度案例分析

image.png
image.png
image.png
image.png
image.png