Кафка множественный потребитель

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

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

Ответы 2

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

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

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

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

б) Стремитесь к началу всех разделов, назначенных вашему потребителю, используя: 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

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

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