flink1.12.x Task Slots 和 slot sharing共享slot

Task Slots 任务槽

每个 Worker( 即:Task Manager)是一个 JVM 进程,通常会在 单独的线程 里执行一个或者多个子任务。为了控制一个 Worker 能够接受多少个 task,在Worker上提出 Task Slot 概念,通过 Task Slot 进行控制

至少一个 slot

Task Slot 是 Task Manager 最小资源分配单位,有多少个 Task Slot,就表示可同时运行多少个工作线程

比如:一个 TaskManager 有3个 Slots ,每个 Slot 能管理对这个 Worker 分配的资源的 3分之1 的内存。 对资源分槽,意味着 Subtask 不会同其他 Subtasks 竞争内存,Subtasks 之间不受影响

slot sharing 共享slot

默认情况下,Flink允许子任务 共享 slots,即便它们是不同任务的子任务,只要属于同一个job。这样的结果就是一个 slot 会负责一个 job 的整个 pipeline 。

使用共享的 slot 的将充分的利用分槽的资源,使代价较大的 subtask 能够均匀的分布在 TaskManager 上。

如:

  • 第一个图:只有 2个 task slot 运行 source、map
  • 第二个图:共享 slot 的执行模式中可以并行运行 6 个 source、map

实践中,比较好的每个 TaskManager 的 task slot 的默认数量最好是 CPU的核数。


原文出处:/show_1IX1zXQ0QLYb.html