繁体   English   中英

在任务管理器之间均匀分布 Flink 操作符

[英]Distribute a Flink operator evenly across taskmanagers

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

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

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

据我所知,这是不可能的。 将任务安排到任务槽中的作业管理器只知道任务槽。 它不知道某些任务槽属于一个任务管理器,而另一些则属于另一个任务管理器。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM