Apache flink Flink任务管理器中的插槽是什么?

Apache flink Flink任务管理器中的插槽是什么?,apache-flink,Apache Flink,在ApacheFlink系统架构中,我们有客户机进程、主进程(JobManager)、工作进程(TaskManager)的概念 上面的每个进程基本上都是一个JVM进程。TaskManager执行单个任务,每个任务在一个线程中执行。因此,管理器到进程或任务到线程的映射是明确的 TaskManager中的插槽如何?插槽映射到什么?Flink中的任务插槽是资源管理和调度的主要单元 当Dispatcher(Flink Master的一部分)接收到要执行的作业时,它会查看作业的执行图以查看执行它需要多少插

在ApacheFlink系统架构中,我们有客户机进程、主进程(JobManager)、工作进程(TaskManager)的概念

上面的每个进程基本上都是一个JVM进程。TaskManager执行单个任务,每个任务在一个线程中执行。因此,管理器到进程或任务到线程的映射是明确的


TaskManager中的插槽如何?插槽映射到什么?

Flink中的任务插槽是资源管理和调度的主要单元

当Dispatcher(Flink Master的一部分)接收到要执行的作业时,它会查看作业的执行图以查看执行它需要多少插槽,并向资源管理器请求这些插槽。然后,资源管理器将尽其所能获得这些插槽(有一个纱线资源管理器、一个Kubernetes资源管理器等)。例如,Kubernetes资源管理器将根据需要启动新的任务管理器吊舱,以创建更多插槽

每个任务管理器都配置了一定数量的内存和一定数量的CPU内核,以及为执行任务提供的一定数量的插槽。这些插槽共享任务管理器可用的资源

通常,一个插槽将从作业的一个平行部分分配任务,并且 执行作业所需的插槽数通常与具有最高并行度的任务的并行度相同。我之所以说“通常”,是因为如果禁用插槽共享(插槽共享允许多个任务共享同一个插槽),那么将需要更多的插槽——但几乎没有什么好的理由禁用插槽共享

下图显示了一个简单作业的执行图,其中源、映射和窗口操作符的并行度为2,接收器的并行度为1。源和映射已链接到一个任务中,因此此执行图总共包含5个需要分配给任务槽的任务

下一个图显示了两个TMs,每个TMs都有一个插槽,您可以看到调度器如何跨这两个插槽分配5个任务


从图中,我了解到TaskManager基本上是一个JVM进程,任务由线程执行。线程(任务)在JVM进程(taskmanager)内运行。因此,我可以将这2个Flink单元(task,taskmanager)映射到JVM单元(thrad,process)。但Flink的插槽概念映射到了什么呢?它只是Flink用于调度和资源管理的一个抽象概念。我不相信它能很好地映射到单个操作系统或JVM结构上。如果你看一下它的实现,你会发现TaskSlot属于一个作业,管理一组任务,并且有一个内存管理器。它基本上是一个Flink结构,用于管理任务执行所需的资源。