Кафка множественный потребитель - PullRequest
0 голосов
/ 09 февраля 2019

Когда у нас есть несколько читателей, читающих тему из одного раздела. Есть ли вероятность, что все потребители получат все сообщения.Я создал двух потребителей с коммитом смещения вручную. Запустил первого потребителя, а через 2 минуты начал второго потребителя.Второй потребитель читает из сообщения, откуда 1-й потребитель прекратил чтение.Есть ли вероятность, что второй потребитель прочитает все сообщение с самого начала. Я новичок в kafka, пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

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

0 голосов
/ 09 февраля 2019

В вашем потребителе вы будете использовать commitSync , который фиксирует смещение, возвращаемое при последнем опросе.Теперь, когда вы запускаете своего второго потребителя, так как он находится в той же группе потребителей, он будет читать сообщения с последнего зафиксированного смещения.

Сообщения, которые будет потреблять ваш потребитель, зависят от группы потребителей, к которой он принадлежит.Предположим, у вас есть 2 раздела и 2 потребителя в одной группе потребителей, тогда каждый потребитель будет читать из разных разделов, что помогает достичь параллелизма.

Итак, если вы хотите, чтобы ваш второй потребитель читал с начала, вы можете сделать одиниз 2 вещей:

а) Попробуйте поместить второго потребителя в другую группу потребителей.Для этой группы потребителей не будет сохранено никакого смещения.В это время, auto.offset.reset config будет определять начальное смещение.Установите auto.offset.reset на earliest (сбросить смещение до самого раннего смещения) или latest (сбросить смещение до самого последнего смещения).

b) Найти начало всех разделов, назначенных вашему потребителю с помощью: consumer.seekToBeginning(consumer.assignment())

Документация: https://kafka.apache.org/11/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#seekToBeginning-java.util.Collection-

https://kafka.apache.org/documentation/#consumerconfigs

...