我在一个由15台机器组成的裸机集群上制作了一个Flink流应用程序的原型。我使用的是yarn-mode,有90个任务槽(15x6)。
该应用程序从单个Kafka主题读取数据。Kafka主题有15个分区,因此我也将源运算符的并行度设置为15。然而,我发现Flink在某些情况下会将2-4个使用者任务实例分配给同一个任务管理器。这会导致某些节点变得网络受限( Kafka主题服务于大量数据,而机器只有1G网卡)和整个数据流中的瓶颈。
有没有办法“强制”或以其他方式指示Flink在所有任务管理器之间均匀分配任务,比如循环?如果没有,有没有办法手动将任务分配给特定的任务管理器插槽?
发布于 2018-08-10 20:35:11
据我所知,这是不可能的。作业管理器将任务调度到任务槽中,它只知道任务槽。它不知道一些任务槽属于一个任务管理器,而另一些属于另一个任务管理器。
发布于 2020-06-11 21:02:25
Flink不允许手动分配任务槽,因为在处理故障的情况下,它可以将任务分配给剩余的任务管理器。
但是,您可以通过在flink-conf.yaml中设置cluster.evenly-spread-out-slots: true来均匀分配工作负载。这适用于Flink >= 1.9.2。
要使其正常工作,您可能还需要设置:
taskmanager.numberOfTaskSlots等于每台计算机的可用CPU数,以及
parallelism.default等于群集中的CPU总数。
https://stackoverflow.com/questions/51775380
复制相似问题