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

sea*_*ato 5 apache-flink flink-streaming

根据Flink 文档,有两个维度会影响任务可用的资源量:

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

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

使用文档中的这一行,似乎您总是倾向于增加每个任务管理器的任务槽数量而不是增加任务管理器的数量。

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

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

Fab*_*ske 3

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

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