是什么原因更喜欢增加任务管理器的数量而不是每个任务管理器的任务插槽?

时间:2018-11-30 00:37:12

标签: apache-flink flink-streaming

根据the Flink documentation,存在两个维度来影响任务可用的资源量:

  1. 任务管理器的数量
  2. 任务管理器可用的任务槽数量。
  

每个TaskManager具有一个插槽,这意味着每个任务组都在单独的JVM中运行(例如,可以在单独的容器中启动)。具有多个插槽意味着更多子任务共享同一JVM。同一JVM中的任务共享TCP连接(通过多路复用)和心跳消息。 他们还可以共享数据集和数据结构,从而减少每个任务的开销。

在文档中有这一行,看来您总是会错在增加每个任务管理器的任务插槽数量,而不是增加任务管理器的数量。

一个具体的场景:如果我在Kubernetes中部署了一个工作集群(假设有16个CPU内核可用),并且一个由一个源+一个映射函数+一个接收器组成的管道,那么我将默认使用一个TaskManager与该TaskManager可使用16个插槽。

这是最佳配置吗?是否有一种情况我更喜欢16个TaskManager,每个都有一个插槽,或者可能是TaskManager和插槽的组合可以利用所有16​​个CPU内核?

1 个答案:

答案 0 :(得分:1)

没有最佳配置,因为通常无法定义“最佳”。每个TM具有一个插槽的配置可提供良好的隔离,并且通常更易于管理和推理。

如果您运行多个作业,则多插槽配置可能会将不同作业的任务调度到一个TM。如果TM发生故障,例如,由于两个任务中的任何一个消耗了太多的内存,则两个作业都将重新启动。另一方面,每个TM运行一个插槽可能会留下更多的未使用内存。如果每个群集只运行一个作业,则每个TM可以有多个插槽。

相关问题