在任务管理器之间均匀分配 Flink 运算符



我正在一个由 15 台机器组成的裸机集群上对 Flink 流应用程序进行原型设计。我使用的是带有 90 个任务槽 (15x6( 的纱线模式。

该应用程序从单个 Kafka 主题读取数据。Kafka 主题有 15 个分区,因此我也将源运算符的并行度设置为 15。但是,我发现 Flink 在某些情况下将 2-4 个消费者任务实例分配给同一个任务管理器。这会导致某些节点受网络限制(Kafka 主题提供大量数据,而计算机只有 1G NIC(和整个数据流中的瓶颈。

有没有办法"强制"或以其他方式指示 Flink 在所有任务管理器中均匀分配任务,也许是循环?如果没有,有没有办法手动将任务分配给特定的任务管理器插槽?

据我所知,这是不可能的。将任务调度到任务槽中的作业管理器仅知道任务槽。它不知道某些任务槽属于一个任务管理器,而其他任务槽属于另一个任务管理器。

Flink 不允许手动分配任务槽,因为在处理故障的情况下,它可以将任务分发给剩余的任务管理器。

但是,您可以通过在flink-conf.yaml中设置cluster.evenly-spread-out-slots: true来均匀分配工作负载。 这适用于 Flink>= 1.9.2。

要使其正常工作,您可能还必须设置:
taskmanager.numberOfTaskSlots等于每台计算机的可用 CPU 数,
parallelism.default等于群集中的 CPU 总数。

相关内容

  • 没有找到相关文章

最新更新