Поведение данных Kafka при создании раздела

Я тестирую добавление разделов Kafka в работающую систему, но мне не ясно, как Kafka управляет существующими данными, если вы добавляете разделы в существующую тему.

Например:

  1. У меня есть экземпляр Kafka с темой test с 1 разделом и 1 репликой.
  2. Группа производителей начинает вставлять в эту тему, а группа потребителей начинает потреблять.
  3. Изменяю тему, чтобы добавить еще один раздел.

Что в этом случае происходит с данными темы? Произведена ли перебалансировка между обоими разделами или новый раздел будет использоваться только для новых произведенных данных?

Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Apache Kafka - популярная платформа распределенной потоковой передачи данных, которую можно использовать для построения конвейеров данных в реальном...
1
0
555
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Добавление разделов не меняет разделение существующих данных, в этом отношении оно основано на философии "только добавление". Например, если данные разделены хешем (ключом)% number_of_partitions, тогда это разделение потенциально будет перетасовано путем добавления разделов, kafka не будет пытаться сбалансировать / перераспределить его.

Итак, существует ли идиоматический способ (1) добавления разделов и (2) обеспечения сохранения порядка? Сообщение m1 с ключом k1 отправляется в раздел p2. После добавления раздела сообщение m2 с ключом k1 отображается на раздел p3. Таким образом, потребитель может читать m2 первый из p3 и только тогда m1 из p2.

DimanNe 27.07.2020 18:53

Добавление раздела не вызывает перераспределения данных, которые уже находятся в разделах текущей темы. В новый раздел будут отправлены только новые созданные данные, и вы должны учитывать следующую проблему при добавлении нового раздела ... Если вы используете разделитель по умолчанию и отправляете сообщения с помощью ключа, он работает следующим образом: hash (key)% number_partitions. Kafka гарантирует, что сообщения с одним и тем же ключом попадают в одни и те же разделы, но это не так, когда вы добавляете раздел, потому что в предыдущей формуле number_partitions изменяется, поэтому сообщение с ключом = k1, которое перед добавлением раздела перешло, например, в раздел 0, теперь можно было перейти в раздел 1 (из-за нового раздела).

Другие вопросы по теме