[英]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.