Kafka PartitionStrategy + горизонтальное масштабирование - PullRequest
0 голосов
/ 19 декабря 2018

Я запутался, в какой степени назначение разделов относится к клиентской части partition.assignment.strategy и какая часть обрабатывается Kafka.

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

Если я создаю 1 приложение, которое запускает 5 потоков потребителей, с partition.assignment.strategy RangeAssignor, то я должен получить 5 потребителей, каждый из которых использует 25 разделов.

Теперь, если я масштабирую это приложение, развернув его 4 разаи используя ту же группу потребителей.Будет ли kafka сначала разделить 25 разделов для каждого из этих приложений на своей стороне, и только затем эти 25 разделов будут далее разделены приложением, использующим PartitionStrategy?

В результате получилось бы 4 приложения с 5 потребителями в каждом, по 5 разделов в каждом.

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Это начнется с каждого потребителя, потребляющего от 20 разделов.Когда вы масштабируете и получаете 4 x 5 потребителей, вы получите в общей сложности 20 потребителей, каждый из которых потребляет 5 разделений.

Кафка видит только потребителей, и не важно, из какого приложения они приходятот

0 голосов
/ 19 декабря 2018

Как часть управления группой, потребитель будет отслеживать список потребителей, принадлежащих к определенной группе, и запустит операцию перебалансировки, если сработает одно из следующих событий:

  1. Изменение количества разделов для любой из подписанных тем
  2. Подписанная тема создается или удаляется
  3. Существующий член группы потребителей завершает работу или не работает.
  4. В группу потребителей добавлен новый участник.

Скорее всего, точка №.4 - ваш случай, и используемая стратегия будет такой же (partition.assignment.strategy).Не то чтобы это не применимо, если вы явно указали раздел, который будет использоваться вашим потребителем

0 голосов
/ 19 декабря 2018

Поведение Assignors по умолчанию хорошо задокументировано в Javadocs.

RangeAssignor является Assignor по умолчанию, см. Его Javadoc для примера назначения, которое он генерирует: http://kafka.apache.org/21/javadoc/org/apache/kafka/clients/consumer/RangeAssignor.html

Если у вас есть20 потребителей, использующих RangeAssignor, которые используют тему из 100 разделов, каждому потребителю будет назначено 5 разделов.

Поскольку RangeAssignor назначает разделы по темам, они могут создавать действительно несбалансированные назначения, если у вас есть темы с очень небольшим количеством разделов.,В этом случае RoundRobinAssignor работает лучше

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