Apache flink 有什么理由喜欢增加任务管理器的数量而不是每个任务管理器的任务槽?

Apache flink 有什么理由喜欢增加任务管理器的数量而不是每个任务管理器的任务槽?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,根据,影响任务可用资源量的因素有两个方面: 任务管理器的数量 任务管理器可用的任务插槽数 每个TaskManager有一个插槽意味着每个任务组在单独的JVM中运行(例如,可以在单独的容器中启动)。拥有多个插槽意味着更多的子任务共享同一个JVM。同一JVM中的任务共享TCP连接(通过多路复用)和心跳消息他们还可以共享数据集和数据结构,从而减少每项任务的开销。 使用文档中的这一行,您似乎总是错误地增加每个任务管理器的任务槽数量,而不是增加任务管理器的数量 一个具体的场景:如果我在Kubernetes

根据,影响任务可用资源量的因素有两个方面:

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

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

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


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

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


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

    粗略浏览邮件列表似乎可以证实我的假设[1],但最好了解更多相反的参数(X个TaskManager,每个插槽1个)或混合型(多个TaskManager,每个插槽1个)。[1]