Ответ
В Kafka распределение партиций топика по брокерам кластера управляется контроллером (специальным брокером) и следует определенным правилам для обеспечения балансировки и отказоустойчивости.
Основные правила и механизмы:
-
Распределение партиций при создании топика:
- Партиции и их реплики равномерно распределяются по всем доступным брокерам.
- Алгоритм стремится разместить лидера партиции и ее реплики на разных брокерах (и в разных стойках, если настроена
rack awareness).// Создание топика с 4 партициями и фактором репликации 3 try (AdminClient admin = AdminClient.create(props)) { NewTopic newTopic = new NewTopic("orders", 4, (short) 3); admin.createTopics(Collections.singleton(newTopic)); }
-
Роли реплик:
- Лидер (Leader): Обрабатывает все запросы на чтение и запись для своей партиции.
- Последователь (Follower): Пассивно реплицирует данные с лидера. При отказе лидера один из синхронизированных последователей автоматически становится новым лидером.
-
Ребалансировка:
- При добавлении нового брокера в кластер Kafka может автоматически перераспределить часть партиций на него, чтобы выровнять нагрузку.
- При выходе брокера из строя контроллер назначает новые лидеры для партиций, которые он обслуживал, из числа их реплик на других брокерах.
-
Ручное назначение (для особых случаев):
- С помощью утилиты
kafka-reassign-partitions.shможно вручную задать целевое размещение реплик, что используется для оптимизации производительности или соблюдения требований размещения данных.
- С помощью утилиты