Кафка - возможно ли изменить количество разделов в Теме, оставив изменения прозрачными для Производителей и Потребителей? - PullRequest
0 голосов
/ 04 января 2019

Я исследую Kafka, чтобы оценить его пригодность для нашего варианта использования.Не могли бы вы помочь мне понять, насколько гибок Kafka с изменением количества разделов для существующей темы?

В частности,

  1. Можно ли изменить количество разделов, не разрушая кластер?
  2. И возможно ли это сделать, не затрагивая тему?
  3. Будет ли добавление / удаление разделов автоматически заботиться о перераспределении сообщений между новыми разделами?

В идеале, я бы хотел, чтобы изменение было прозрачным для производителей и потребителей.Кафка это обеспечивает?

Обновление: Насколько я понимаю, похоже, что дизайн Кафки не может этого допустить, потому что его отображение групп потребителей на разделы придется изменить.Это правильно?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

1. Можно ли изменить количество разделов, не разрушая кластер?

Да, kafka поддерживает увеличение количества разделов во время выполнения, но не поддерживает уменьшение количестваразделы из-за его дизайна

2. И возможно ли это сделать, не затрагивая тему?

Да, если вы увеличиваете разделы.

3.Будет ли при добавлении / удалении разделов автоматически перераспределять сообщения между новыми разделами?

Как упоминалось ранее, удаление разделов не поддерживается.

При увеличенииКоличество разделов, существующие сообщения останутся в тех же разделах, что и раньше, только новые сообщения будут рассматриваться для новых разделов (также в зависимости от вашей логики разделителя).Увеличение разделов для темы вызовет перебалансировку кластера, где потребители и производители будут получать уведомления с обновленными метаданными тем.Производители начнут отправлять сообщения в новые разделы после получения обновленных метаданных, а перебалансировщик потребителя перераспределит разделы между группами потребителей и возобновит потребление с последнего зафиксированного смещения. Все это будет происходить под капотом, поэтому вам не придется вносить какие-либо изменения на клиентесторона

0 голосов
/ 04 января 2019
  1. Да, это вполне возможно.Вы просто выполняете следующую команду для выбранной темы: bin/kafka-topics.sh --zookeeper zk_host:port --alter --topic <your_topic_name> --partitions <new_partition_count>.Помните, что Kafka позволяет только увеличивать количество разделов, потому что уменьшение его приведет к потере данных.

    • Здесь есть одна загвоздка.Kafka doc говорит следующее:

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

Да, если под bringing down the topic вы имеете в виду deleting the topic. Как только вы увеличите количество разделов, Kafka вызовет перебалансировку для потребителей, которые подписываются на эту тему, и для последующих опросов.разделы будут распределены между потребителями.Он прозрачен для клиентского кода, вам не о чем беспокоиться.

ПРИМЕЧАНИЕ : Как я уже говорил, вы можете добавлять только разделы, удаление невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...