INFO-实时计算中Slot数量、TM数量与并行度间的关系

适用模块

实时计算

具体说明

介绍实时计算中Slot数量、TM数量与并行度间的关系

使用示例

三者关系为:Slot数量 * TM数量 = 并行度总数

对于分布式执行,Flink 将算子的 subtasks 链接在一起形成 tasks ,每个subtask 中的 Operator 连接成链也就是 Operator chain。对比每个 task 由一个线程执行,将算子链接成 tasks 是个有用的优化:它减少线程间切换、缓冲的开销,并且减少延迟的同时增加整体吞吐量。

image.png

每个 worker(TaskManager)都是一个 JVM 进程,可以在单独的线程中执行一个或多个 subtask。为了控制一个 TaskManager 中接受多少个 task,就有了所谓的 task slots(至少一个)。

每个 task slot 代表 TaskManager 中资源的固定子集。例如,具有 3 个 slot 的 TaskManager,会将其托管内存 1/3 用于每个 slot。分配资源意味着 subtask 不会与其他作业的 subtask 竞争托管内存,而是具有一定数量的保留托管内存。注意此处没有 CPU 隔离;当前 slot 仅分离 task 的托管内存。

通过调整 task slot 的数量,用户可以定义 subtask 如何互相隔离。每个 TaskManager 有一个 slot,这意味着每个 task 组都在单独的 JVM 中运行(例如,可以在单独的容器中启动)。具有多个 slot 意味着更多 subtask 共享同一 JVM。同一 JVM 中的 task 共享 TCP 连接(通过多路复用)和心跳信息。它们还可以共享数据集和数据结构,从而减少了每个 task 的开销。

image.png


作者:denglaixiang