Как работает потребитель кафки, если потребители больше, чем разделы - PullRequest
0 голосов
/ 05 апреля 2019

Может ли кто-нибудь объяснить и направить мне ссылку или ресурс, чтобы прочитать о том, как потребители kafka работают в следующих сценариях.

  1. Одна группа потребителей с 5 потребителями и тема с 3 разделами (как решает Кафка)

  2. Одна группа потребителей с 5 потребителями и раздел с 10 разделами (как распределить нагрузку kafka)

  3. Две группы потребителей с 1 потребителем каждая и кластер kafka из 2 серверов, где одна тема разделена между узлом 1 и узлом 2, как избежать дублирования, когда потребители из разных групп подписались на один раздел.

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

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Назначать перегородки - не сама Кафка, а один из потребителей. Первый, присоединившийся к группе потребителей, будет выбран как своего рода «лидер», и мы начнем назначать разделы другим потребителям. Конечно, каждый раз, когда новый потребитель присоединяется к группе, «контролер» Kafka сообщает ведущему потребителю об этом, и он начинает перебалансировать перераспределение разделов. То же самое происходит, когда потребитель покидает группу потребителей.

Чтобы подтвердить, что в этом участвует потребитель, стратегия назначения раздела указывается свойством partition.assignment.strategy в конфигурации потребителя. Значением по умолчанию является RangeAssignor, в то время как остальные RoundRobinAssignor и StickyAssignor. Вы можете узнать больше о том, как они работают здесь:

https://kafka.apache.org/21/javadoc/org/apache/kafka/clients/consumer/RangeAssignor.html https://kafka.apache.org/21/javadoc/org/apache/kafka/clients/consumer/RoundRobinAssignor.html https://kafka.apache.org/21/javadoc/org/apache/kafka/clients/consumer/StickyAssignor.html

Сказал, что конкретно происходит в ваших сценариях?

  1. 3 потребителя получат по одному разделу каждый. Остальные 2 будут простаивать.
  2. каждый потребитель получит 2 раздела
  3. Использование разных групп потребителей означает чистый паб / саб, где группы потребителей получают одинаковые сообщения. В вашем случае с 1 темой и 2 разделами (по 2 брокера) два потребителя, каждый в одной отдельной группе потребителей, получат одинаковые сообщения от всех 2 разделов. Если потребители входят в различные группы потребителей, вы не можете избежать дублирования, так работает Кафка.
0 голосов
/ 05 апреля 2019

Это зависит от partition.assignment.strategy свойства, которое по умолчанию установлено в класс org.apache.kafka.clients.consumer.RangeAssignor bu. Из документа Java:

Распределитель диапазонов работает отдельно для каждой темы. Для каждой темы мы выкладываем доступные разделы в числовом порядке и потребителей в лексикографическом порядке. Затем мы делим количество разделов на общее количество потребителей, чтобы определить количество разделов, назначаемых каждому потребителю. Если он не разделен поровну, то у первых нескольких потребителей будет один дополнительный раздел. Например, предположим, что есть два потребителя C0 и C1, две темы t0 и t1, и каждая тема имеет 3 раздела, в результате чего создаются разделы t0p0, t0p1, t0p2, t1p0, t1p1 и t1p2. Назначение будет: C0: [t0p0, t0p1, t1p0, t1p1] C1: [t0p2, t1p2]

Вы можете предоставить собственную стратегию, реализовав org.apache.kafka.clients.consumer.internals.PartitionAssignor . Об этом есть хорошая статья на Medium.

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