Как управлять тем, чтобы задания Flink правильно распределялись / распределялись между диспетчерами задач в кластере?

#apache-flink #flink-streaming #distributed-system

#apache-flink #flink-streaming #распределенная система

Вопрос:

Как управлять распределением / балансировкой нагрузки заданий Flink (равномерно или другим способом, где мы можем установить пороговое значение для Free-Slots / Physical MEM / CPU Cores / JVM Heap Size и т. Д.) Среди диспетчеров задач в кластере?

Например, у меня есть 3 диспетчера задач в кластере, где один диспетчер задач сильно загружен, хотя их много Free Slots , и другие ресурсы доступны в других диспетчерах задач в кластере.

введите описание изображения здесь

Поэтому, если конкретный диспетчер задач сильно загружен, это может вызвать много проблем, например Memory issues , heap issues , high back-pressure , Kafka lagging (может замедлить работу источника и приемника) и т. Д., Что может привести к многократному перезапуску контейнера.

Примечание: возможно, я не упомянул здесь все возможные проблемы из-за этого ограничения, но в целом у distributed systems нас не должно быть таких ограничений.

Ответ №1:

Похоже cluster.evenly-spread-out-slots , это тот вариант, который вы ищете. Смотрите Документы. Если для этого параметра установлено значение true, Flink будет стараться всегда использовать слоты из наименее используемой TM, когда нет никаких других предпочтений. Другими словами, источники будут размещены в наименее используемой TM, а затем последует остальная часть топологии (потребители будут стараться находиться рядом со своими производителями, чтобы поддерживать локальную связь).

Эта опция будет полезна только в том случае, если у вас есть статический набор TMS (например, автономный кластер, а не кластер, который динамически запускает и останавливает TMS по мере необходимости).

Как бы то ни было, во многих отношениях кластерами для каждого задания (или в режиме приложения) управлять проще, чем кластерами сеансов.