首页 > 解决方案 > 如何控制 Flink 作业在集群中的任务管理器之间正确分配/负载平衡?

问题描述

如何在集群中的任务管理器中正确控制 Flink 的作业在集群中的任务管理器之间进行分布式/负载平衡(均匀或其他方式,我们可以设置Free-Slots/ Physical MEM/ CPU Cores/JVM Heap Size等的阈值限制)?

例如,我在一个集群中有 3 个任务管理器,其中一个任务管理器负载很重,即使Free Slots集群中的其他任务管理器中有很多资源可用。

在此处输入图像描述

因此,如果一个特定的任务管理器负载很重,那么它可能会导致许多问题,例如,、、(Memory issues可能会减慢源和接收器操作)等,这可能会导致容器多次重新启动。heap issueshigh back-pressureKafka lagging

注意:由于这个限制,我可能没有在这里提到所有可能的问题,但总的来说distributed systems我们不应该有这样的限制。

标签: apache-flinkflink-streamingdistributed-system

解决方案


这听起来像是cluster.evenly-spread-out-slots您正在寻找的选项。请参阅文档。将此选项设置为 true 时,当没有任何其他偏好时,Flink 将尝试始终使用最少使用 TM 中的插槽。换句话说,源将放置在最少使用的 TM 中,然后拓扑的其余部分将遵循(消费者将尝试与其生产者位于同一地点,以保持本地通信)。

只有当您拥有一组静态 TM(例如,独立集群,而不是根据需要动态启动和停止 TM 的集群)时,此选项才会有用。

值得一提的是,在许多方面,按作业(或应用程序模式)集群比会话集群更易于管理。


推荐阅读