大数据学习之Flink——05Flink的Parallelism和Slot

本文借鉴了: http://www.54tianzhisheng.cn/2019/01/14/Flink-parallelism-slot/

一. Parallelism(并行度)

1. 什么是Parallelism

parallelism 是并行的意思,在 Flink 里面代表每个任务的并行度,适当的提高并行度可以大大提高 job 的执行效率

2. 设置Parallelism

一个任务的并行度设置可以从 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,可以通过如下方式设置执行环境的并行度
    大数据学习之Flink——05Flink的Parallelism和Slot
    大数据学习之Flink——05Flink的Parallelism和Slot

  3. 客户端
    并行度还可以在客户端提交 Job 到 Flink 时设定。对于 CLI 客户端,可以通过-p 参数指定并行度
    web UI
    大数据学习之Flink——05Flink的Parallelism和Slot
    命令行
    大数据学习之Flink——05Flink的Parallelism和Slot
    大数据学习之Flink——05Flink的Parallelism和Slot

  4. 系统层面
    在系统级可以通过设置flink-conf.yaml文件中的parallelism.default属性来指定所 有执行环境的默认并行度。
    大数据学习之Flink——05Flink的Parallelism和Slot

二. Slot

1. 什么是Slot

大数据学习之Flink——05Flink的Parallelism和Slot

  1. 图中 Task Manager 是从 Job Manager 处接收需要部署的 Task,任务的并行性由每个 Task Manager 上可用的 slot 决定。每个任务代表分配给任务槽的一组资源,slot 在 Flink 里面可以认为是资源组,Flink 将每个任务分成子任务并且将这些子任务分配到 slot 来并行执行程序。
  2. 例如,如果 Task Manager 有四个 slot,那么它将为每个 slot 分配 25% 的内存。 可以在一个 slot 中运行一个或多个线程。 同一 slot 中的线程共享相同的 JVM。 同一 JVM 中的任务共享 TCP 连接和心跳消息。Task Manager 的一个 Slot 代表一个可用线程,该线程具有固定的内存,注意 Slot 只对内存隔离,没有对 CPU 隔离。默认情况下,Flink 允许子任务共享 Slot,即使它们是不同 task 的 subtask,只要它们来自相同的 job。这种共享可以有更好的资源利用率。

大数据学习之Flink——05Flink的Parallelism和Slot

  1. 上面图片中有两个 Task Manager,每个 Task Manager 有三个 slot,这样我们的算子最大并行度那么就可以达到 6 个,在同一个 slot 里面可以执行 1 至多个子任务。

  2. 那么再看上面的图片,source/map/keyby/window/apply 最大可以有 6 个并行度,sink 只用了 1 个并行。

  3. 每个 Flink TaskManager 在集群中提供 slot。 slot 的数量通常与每个 TaskManager 的可用 CPU 内核数成比例。一般情况下你的 slot 数是你每个 TaskManager 的 cpu 的核数。

三. Parallelism 和 Slot

  1. slot 是指 taskmanager 的并发执行能力
    大数据学习之Flink——05Flink的Parallelism和Slot
    taskmanager.numberOfTaskSlots:3
    每一个 taskmanager 中的分配 3 个 TaskSlot, 3 个 taskmanager 一共有 9 个 TaskSlot。

  2. parallelism 是指 taskmanager 实际使用的并发能力
    大数据学习之Flink——05Flink的Parallelism和Slot

    parallelism.default:1

    运行程序默认的并行度为 1,9 个 TaskSlot 只用了 1 个,有 8 个空闲。设置合适的并行度才能提高效率。

  3. parallelism 是可配置、可指定的

    大数据学习之Flink——05Flink的Parallelism和Slot

    上图中 example2 每个算子设置的并行度是 2, example3 每个算子设置的并行度是 9。
    大数据学习之Flink——05Flink的Parallelism和Slot
    example4 除了 sink 是设置的并行度为 1,其他算子设置的并行度都是 9。