Flink:并行度和槽数之间有什么关系

Flink: what is the relationship between parallelism and slot nums

看来分配的槽数应该等于并行度。
并且任务管理器的数量应等于并行度/(每个 TM 的插槽)。
但是下面的应用不是这样的

拓扑图如下。

并行度设置为 140,每个 TM 一个插槽。
但是只分配了 115 个插槽。

应用程序在几分钟后抛出异常。

异常提示“无法在 300000 毫秒的超时时间内分配所有需要的插槽。所需的插槽:470,已分配的插槽:388”。

这里有几个问题。

  1. “所需插槽数:470”,这个数字的计算似乎与插槽份额无关。为什么?
  2. “slots allocated: 388”,其实我只剩下195个slots,分配的slots是115个,为什么?
  3. 并行度设置为140,但只分配了115个槽。为什么?

你需要检查配置parameters:slotSharingGroup,看起来每个操作员的参数(slotSharingGroup)是different.so任务需要470个槽。参数详情:https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/stream/operators/

当调度程序显示“需要的槽:470,已分配的槽:388”时,我相信这是在说调度程序需要为 470 个任务找到槽,但只成功为其中的 388 个找到槽。 470 是执行图中的任务总数:140 + 140 + 50 + 140。

现在回答你的问题:

当插槽共享完全启用时(这是默认设置),则作业需要的插槽数与具有最高并行度的任务的并行度一样多。在你的例子中是 140.

但仅仅因为一个作业 wants/needs 140 个槽位并不意味着集群能够提供那么多槽位。由于某种原因,只启动了 115 个任务管理器。可能某些资源或配额已用完。

在同事的帮助下,终于找到重点了

确实是资源用完了

虽然整体来说,还是有一些空余的记忆和核心。 但在机器看来,部分机器有一些空闲内存,但没有足够的内核。而其他机器有一些空闲内核,但没有足够的内存。

情况就像下面的table(我们的情况一个TM需要4G)。

因此,容器可以在 none 这些机器上启动。因为我们找不到内存和内核都足够的机器。 并且应用程序在 CREATING 时挂起。

关于异常中的消息(在版本 1.6.4 中抛出):“无法在 300000 毫秒的超时时间内分配所有需要的插槽。所需的插槽:470,已分配的插槽:388”。我想,考虑到数量,这里的'slot'实际上是'subtask',而不是'core'。

在1.11.0版本中,异常中的消息发生了变化,它说'Could not allocate the required slot within slot request timeout. Please make sure that the cluster has enough resources.'这个描述可能更合适。