Поведение потребителя Kafka

#apache-kafka #kafka-consumer-api

#apache-kafka #kafka-consumer-api

Вопрос:

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

http://kafka.apache.org/documentation.html#intro_consumers
http://kafka.apache.org/documentation.html#theconsumer

Насколько я понимаю, если существует более одного потребителя с одной и той же группой потребителей, сообщение будет доставлено ровно одному потребителю в группе. Мой вопрос здесь о механизме доставки, упомянутом в строке, — PUSH или PULL? Если это PUSH, что считается доставленным?(передача семантики). Если это pull, как kafka гарантирует, что каждое сообщение будет прочитано только одним потребителем (синхронизация между потребителями)? Спасибо!

Комментарии:

1. В нем говорится, что «потребитель извлекает из брокера». Так что это определенно ТЯНЕТ.

2. Да, у меня сложилось такое впечатление, но я хотел перепроверить. Знаете ли вы ответ на другую часть вопроса.

3. При чтении в нем говорится: «Потребители помечают себя именем группы потребителей, и каждая запись, опубликованная в теме, доставляется одному экземпляру потребителя в каждой подписавшейся группе потребителей. (…) Если все экземпляры потребителей имеют одну и ту же группу потребителей, то записи будут эффективно распределены по нагрузке по экземплярам потребителей. Если все экземпляры потребителей имеют разные группы потребителей, то каждая запись будет транслироваться всем процессам потребителей. » Не уверен, что это отвечает вашим сомнениям.

Ответ №1:

Если это pull, как kafka гарантирует, что каждое сообщение будет прочитано только одним потребителем?

Это зависит от того, что вы подразумеваете под «Кафкой». Брокер ничего не проверяет, потому что это модель извлечения (т. Е. брокер доставляет данные, которые запрашивает потребитель, и не заботится ни о чем другом).

Таким образом, ответственность за разделение работы лежит на потребителях. Например, при использовании KafkaConsumer все экземпляры потребителей взаимодействуют друг с другом через «протокол управления группами» (этот протокол предлагается брокерами; другой, не Java-клиент, также предлагает возможности управления группами). Это позволяет экземплярам решать, какой из них обрабатывал какие разделы темы. Таким образом, каждый раздел присваивается ровно одному потребителю. По сути, это «контракт»: экземпляры потребителей общаются друг с другом, и каждый потребитель обещает использовать данные только из назначенных ему разделов.

Если вы хотите узнать больше, посмотрите Kafka wiki: https://cwiki.apache.org/confluence/display/KAFKA/Kafka 0.9 Потребитель Переписать Дизайн