#apache-kafka
#apache-kafka
Вопрос:
Для конкретной темы мы хотим иметь один раздел для каждого брокера. Идея в том, что для масштабирования мы продолжаем добавлять брокеров. Однако, когда я проверяю, как добавляются новые разделы, это работает не так, как я ожидал. Например, у меня есть три брокера: 2064029428, 2064029280, 2064028458. Я создаю новую тему:
/opt/kafka/bin/kafka-topics.sh --create --zookeeper zk.net:2181/stream --topic test --partitions 2 --replication-factor 1
/opt/kafka/bin/kafka-topics.sh --describe --zookeeper zk.net:2181/stream --topic test
Topic:test PartitionCount:2 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 2064029428 Replicas: 2064029428 Isr: 2064029428
Topic: test Partition: 1 Leader: 2064028458 Replicas: 2064028458 Isr: 2064028458
Затем я изменяю тему, чтобы добавить еще один раздел.
/opt/kafka/bin/kafka-topics.sh --alter --zookeeper zk.net:2181/stream --topic test --partitions 3
/opt/kafka/bin/kafka-topics.sh --describe --zookeeper zk.net:2181/stream --topic test
Topic:test PartitionCount:3 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 2064029428 Replicas: 2064029428 Isr: 2064029428
Topic: test Partition: 1 Leader: 2064028458 Replicas: 2064028458 Isr: 2064028458
Topic: test Partition: 2 Leader: 2064029428 Replicas: 2064029428 Isr: 2064029428
Я ожидал, что новый раздел будет создан на брокере 2064029280, поскольку в настоящее время у него нет раздела. Вместо этого я получаю два раздела на одном и том же брокере 2064029428. Ожидается ли это? Есть ли способ контролировать, где добавляется новый раздел? Я попробовал --replica-assignment
вариант, который работает при создании темы, но не не работает при изменении темы.
Ответ №1:
Как указано в документе kafka, в настоящее время вам необходимо вручную инициировать переназначение.
В версии 0.8.1 инструмент переназначения разделов не имеет возможности автоматически изучать распределение данных в кластере Kafka и перемещать разделы для достижения равномерного распределения нагрузки. Таким образом, администратор должен выяснить, какие разделы или разделы следует перемещать.
Короче говоря, вы должны использовать bin/kafka-reassign-partitions.sh
инструмент с созданным вручную планом миграции.
Подробнее см. В руководстве по переназначению вручную.
Ответ №2:
Чтобы добавить больше к приведенному выше ответу и больше разъяснений, поскольку у брокера 2064029280 нет раздела, он был бы добавлен в кластер после создания разделов для темы. В противном случае разделы были бы равномерно распределены между брокерами в кластере по умолчанию, и у брокера 2064029280 также был бы раздел. Когда мы изменяем разделы, после добавления нового брокера (2064029280). новые разделы будут равномерно распределены по всем, а не только по новому брокеру, поскольку «инструмент переназначения разделов не имеет возможности автоматически изучать распределение данных в кластере Kafka». Следовательно, он не просто назначает (все) новые разделы новому брокеру для балансировки распределения данных.