每个任务管理器都是一个JVM进程。JVM该过程用于在不同的线程中执行一个或多个子任务。任务管理器和任务插槽构成工作过程。为了控制工作过程中接受的任务数量,可以通过任务插槽控制工作过程。一个工作过程至少有一个任务插槽。
每个任务插槽代表任务管理器的固定资源子集。被划分的资源不是CPU资源是任务的内存资源
用户可以通过调整任务插槽的数量来确定子任务的隔离。如果每个任务管理器有一个任务插槽,则每个任务是单独的JVM中间运行(如在单独的容器中运行)。多个任务插槽意外:多个子任务共享一个JVM;在同一个JVM中,任务通过多路复用技术共享TCP连接和心跳信息。任务还可以共享数据集和数据结构,从而降低每个任务的成本
任务插槽的数量应与CPU核数相同。在使用超线程时,每个任务插槽会占用2个或更多的硬件线程上下文
一、共享任务插槽
默认情况下,Flink允许子任务共享任务插槽(只要它们来自同一操作,它们就是不同任务的子任务)。因此,任务插槽可能负责该操作的整个管道(Pipline)。允许共享任务插槽有两个优点:
- 如果Flink如果集群中有与操作中使用的最高并行度相同的任务插槽,则无需计算操作中包含的任务总数(并行度不同)
- 更好的资源利用率:简单的子任务(如无共享任务插槽)Map)它将占用与复杂子任务(如窗口)相同的资源。如果平行度从2增加到6,则可以充分利用任务插槽的资源,确保任务管理器之间的重子任务公平获取资源,并共享任务插槽