2015-11-12 3 views
17

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

+0

Последний релиз Apache Кафка 0.8.2.2, я сомневаюсь, что вы используете «2.10». Вы можете снова проверить версии. – C4stor

+0

@ C4stor На самом деле я имел в виду Kafka, основанный на Scala 2.10, который именно в указанной вами версии 0.8.2.2. Извините за путаницу. Я отредактирую свой вопрос. –

ответ

36

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

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 выполняет this кусок кода, а также AddPartitionsCommand, используемый kafka-add-partition.

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

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

+0

Спасибо. Попробуй. –

+1

Если данные должны быть перераспределены, существует ли способ переместить только сообщения, которые не были прочитаны, и игнорировать сообщения, которые были прочитаны? – Glide

+1

в соответствии с философией «append-only», я бы предположил, что для достижения этой цели вам потребуется большая длина. Я бы сказал, что проще всего остановить потребление по этой теме, создать новую тему с количеством разделов, которые вы хотите, переиздать непрочитанные сообщения на новую тему, а затем продолжить потребление новой темы. – CmdrDats

2

Пожалуйста, обратите внимание, что в моем случае значение zk_host: порт/корневым для параметра --zookeeper бросил следующее исключение:

ОШИБКА java.lang.IllegalArgumentException: Тема my_topic_name не существует на ZK пути zk_host: порт/корневым.

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

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

'chroot' - это * необязательный * параметр конфигурации, который не должен восприниматься буквально –

Смежные вопросы