Можно ли добавить разделы в существующую тему в Kafka 0.8.2

У меня есть кластер Kafka, работающий с двумя разделами. Я искал способ увеличить количество разделов до 3. Однако я не хочу потерять существующие сообщения в теме. Я попытался остановить Kafka, изменив файл server.properties, чтобы увеличить количество разделов до 3 и перезапустить Kafka. Однако это ничего не меняет. Используя Kafka ConsumerOffsetChecker, я все еще вижу, что он использует только 2 раздела. Версия Kafka, которую я использую, равна 0.8.2.2. В версии 0.8.1 раньше существовал script, называемый kafka-add-partitions.sh, который, я думаю, мог бы сделать трюк. Тем не менее, я не вижу такого script в 0.8.2. Есть ли способ сделать это? Я экспериментировал с созданием совершенно новой темы, и для нее она, похоже, использует 3 раздела в соответствии с изменением в файле server.properties. Однако для существующих тем это, похоже, не заботит.

Ответы

Ответ 1

Похоже, вы можете использовать this script вместо:

bin/kafka-topics.sh --zookeeper zk_host:port/chroot --alter --topic my_topic_name 
   --partitions 40 

В коде похоже, что они делают то же самое:

 AdminUtils.createOrUpdateTopicPartitionAssignmentPathInZK(topic, partitionReplicaList, zkClient, true)

kafka-topics.sh выполняет этот фрагмент кода, а также AddPartitionsCommand, используемый kafka-add-partition script.

Однако при использовании ключа вы должны знать о повторном разделении:

Имейте в виду, что один из вариантов использования для разделов состоит в семантическом разбиении данные и добавление разделов не изменяет разделение существующих данных, поэтому это может помешать потребителям, если они полагаются на это раздел. То есть, если данные разделены на hash(key) % number_of_partitions, то это разбиение будет потенциально перетасовывается путем добавления разделов, но Кафка не будет пытаться автоматически перераспределять данные любым способом.

Ответ 2

В моем случае значение zk_host:port/chroot для параметра --zookeeper бросило следующее исключение:

ERROR java.lang.IllegalArgumentException: Тема my_topic_name не существует на пути ZK zk_host: port/chroot.

Итак, я попробовал следующее, и это сработало:

 bin/kafka-topics.sh --alter --zookeeper zk_host:port --topic my_topic_name --partitions 10

Ответ 3

Если вы используете Kafka в окне, попробуйте этот код для изменения или добавления раздела в теме

.\bin\windows\kafka-topics.bat --alter --zookeeper localhost:2181 --topic TopicName --partitions 20

или же

.\bin\windows\kafka-topics.bat --alter --zookeeper localhost:2181 --topic TopicName --replica-assignment 0:1:2,0:1:2,0:1:2,2:1:0 --partitions 10

Ответ 4

Для тех, кто хочет найти решение для более новых версий Kafka. Пожалуйста, следуйте этому методу.

Вся политика хранения и передачи данных Kafka зависит от разделов, поэтому будьте осторожны с эффектами увеличения разделов. (Более новые версии Kafka отображают предупреждение об этом) Старайтесь избегать конфигурации, в которой у одного брокера слишком много лидерских разделов.

Существует простой трехэтапный подход к этому.

Шаг 1. Увеличьте разделы в темах

./bin/kafka-topics.sh --zookeeper localhost:9092 --alter --topic testKafka_5 --partitions 6

Шаг 2. Создайте разделительный JSON файл для данной темы

{ "версия": 1, "разделы": [   { "Тема": "testKafka_5", "раздел": 0, "Реплика": [0,1,2]},     {"topic": "testKafka_5", "partition": 1, "replicas": [2,1,0]}, {"topic": "testKafka_5", "partition": 2, "replicas": [1, 2,0]},   { "Тема": "testKafka_5", "раздела": 3, "реплики": [0,1,2]},     {"topic": "testKafka_5", "partition": 4, "replicas": [2,1,0]}, {"topic": "testKafka_5", "partition": 5, "replicas": [1, 2,0]} ]}

Создайте файл с более новым разделом и репликами. Лучше расширить реплики для разных брокеров, но они должны присутствовать в одном кластере. Учитывайте время ожидания для дальних реплик. Перенесите данный файл в свою Кафку.

Шаг 3. Переназначение разделов и проверка

./bin/kafka-reassign-partitions.sh --zookeeper localhost:9092 --reassignment-json-file bin/increase-replication-factor.json  --execute

./bin/kafka-reassign-partitions.sh --zookeeper localhost:9092 --reassignment-json-file bin/increase-replication-factor.json --verify

Вы можете проверить влияние своих изменений с помощью команды --describe.