我正在为15台计算机的裸机集群上的Flink流应用程序制作原型。我正在使用带有90个任务槽(15x6)的yarn-mode。
该应用程序从单个Kafka主题读取数据。 Kafka主题有15个分区,因此我也将源运算符的并行度设置为15。但是,我发现Flink在某些情况下会将2-4个消费者任务实例分配给同一任务管理器。这会导致某些节点成为网络绑定(Kafka主题正在提供大量数据,而这些机器仅具有1G NIC)和整个数据流中的瓶颈。
是否有一种方法可以“强制”或以其他方式指示Flink在所有任务管理器(可能是循环调度)之间平均分配任务?如果没有,是否有办法手动将任务分配给特定的任务管理器插槽?
答案 0 :(得分:0)
据我所知,这是不可能的。将任务调度到任务槽中的作业管理器仅知道任务槽。目前尚不清楚某些任务槽属于一个任务管理器,而其他任务槽属于另一任务管理器。
答案 1 :(得分:0)
Flink不允许手动分配任务插槽,因为在进行故障处理时,它可以将任务分配给其余的任务管理器。
但是,您可以通过在cluster.evenly-spread-out-slots: true
中设置flink-conf.yaml
来平均分配工作量。
这适用于Flink> = 1.9.2。
要使其正常工作,您可能还需要设置:
taskmanager.numberOfTaskSlots
等于每台计算机可用的CPU数量,并且
parallelism.default
等于集群中的CPU总数。