对FLINK任务槽感到困惑

问题描述 投票:0回答:6

我知道任务管理器可以有多个任务槽。

但是,什么是任务槽? JVM 进程还是内存中的对象还是线程?

java apache-flink flink-streaming
6个回答
15
投票

答案可能会迟到。但是:

任务管理器 (TM) 是 JVM 进程,而任务槽 (TS) 是相应 JVM 进程 (TM) 内的线程。 TM 的托管内存在 TM 内的 TS 之间平均分配。插槽之间不会发生 CPU 隔离,只是划分托管内存。 此外,同一TM中的TS共享TCP连接(通过复用)和心跳消息。他们还可以共享数据集和数据结构,从而减少每个任务的开销。

来源:https://ci.apache.org/projects/flink/flink-docs-release-1.5/concepts/runtime.html#task-slots-and-resources


4
投票

每个worker(TaskManager)都是一个JVM进程,并且可以在单独的线程中执行一个或多个子任务。为了控制一个工作人员接受多少任务,一个工作人员有所谓的任务槽(至少一个)。

https://ci.apache.org/projects/flink/flink-docs-master/concepts/runtime.html#task-slots-and-resources

enter image description here


3
投票

@Janukowitsch 的回答很好。 此外,TS 表示 TM 资源的固定子集。一个 TS 可以占用多个线程。实际上一个子任务/任务是由一个线程执行的。多个子任务/任务可以部署在同一个槽中。


3
投票

我想解决之前答案中的一些不一致之处:

TaskSlot 是一个线程

默认设置TaskSlot != Thread。 TaskSlot = 仅当槽共享被禁用时才是线程。插槽共享是默认启用的优化,在大多数情况下,您希望保持这种状态。更准确地说,每个操作员链都会获得一个单独的线程 [1] 来执行。

TS 代表 TM 资源的固定子集

事实并非如此。任务槽纯粹是一个调度概念,它可以控制将有多少操作员或操作员链放置在哪个任务管理器上。不保证将一组固定资源分配给任务槽。例如,如果您有一个具有 5 个核心和 5GB RAM 的任务管理器,并分配了两个任务插槽,这些插槽将“竞争”CPU 和内存 - 它们不会以任何固定方式分割。


0
投票

简而言之 - 任务槽是一个资源管理单元,其中操作符链在专用线程中执行,每个子任务都有状态。槽获取子任务执行的一部分内存,并主要用它来保存状态。 taskSkot 有自己的线程池,它获取一系列操作符来执行。该链在一个线程中执行,可以独占访问其状态。 通常,图链(从源到汇)的所有运算符都在线程中执行,并使用同一 TM 中任务槽的资源,但这不是强制性的。


-2
投票

插槽数量通常与每个 TaskManager 的可用 CPU 核心数量成正比。作为一般建议,可用 CPU 核心的数量是 taskmanager.numberOfTaskSlots 的一个很好的默认值。

© www.soinside.com 2019 - 2024. All rights reserved.