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

时间:2018-08-09 20:34:56

标签: apache-flink flink-streaming

我正在为15台计算机的裸机集群上的Flink流应用程序制作原型。我正在使用带有90个任务槽(15x6)的yarn-mode。

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

是否有一种方法可以“强制”或以其他方式指示Flink在所有任务管理器(可能是循环调度)之间平均分配任务?如果没有,是否有办法手动将任务分配给特定的任务管理器插槽?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

Flink不允许手动分配任务插槽,因为在进行故障处理时,它可以将任务分配给其余的任务管理器。

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

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