Назначать перегородки - не сама Кафка, а один из потребителей.
Первый, присоединившийся к группе потребителей, будет выбран как своего рода «лидер», и мы начнем назначать разделы другим потребителям.
Конечно, каждый раз, когда новый потребитель присоединяется к группе, «контролер» 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
Сказал, что конкретно происходит в ваших сценариях?
- 3 потребителя получат по одному разделу каждый. Остальные 2 будут простаивать.
- каждый потребитель получит 2 раздела
- Использование разных групп потребителей означает чистый паб / саб, где группы потребителей получают одинаковые сообщения. В вашем случае с 1 темой и 2 разделами (по 2 брокера) два потребителя, каждый в одной отдельной группе потребителей, получат одинаковые сообщения от всех 2 разделов. Если потребители входят в различные группы потребителей, вы не можете избежать дублирования, так работает Кафка.