Может ли несколько потребителей Kafka прочитать одно и то же сообщение из раздела

Мы планируем написать потребитель Kafka (java), который читает очередь Kafka для выполнения действия, которое содержится в сообщении.

Поскольку потребители работают независимо, будет ли сообщение обрабатываться только одним потребителем за раз? В противном случае все потребители обрабатывают одно и то же сообщение, так как у них есть собственное смещение в разделе.

Пожалуйста, помогите мне понять.

Ответ 1

Это зависит от Идентификатор группы. Предположим, у вас есть тема с 12 разделами. Если у вас есть 2 потребителя Kafka с одинаковым идентификатором группы, они оба прочитают 6 разделов, то есть они будут читать разные группы разделов = другой набор сообщений. Если у вас есть 4 Cosnumers Kafka с одинаковым идентификатором группы, каждый из них будет читать три разных раздела и т.д.

Но когда вы устанавливаете другой идентификатор группы, ситуация меняется. Если у вас есть два потребителя Kafka с разным идентификатором группы, они будут читать все 12 разделов без каких-либо помех друг другу. Значение обоих потребителей будет считывать один и тот же набор сообщений независимо. Если у вас есть четыре потребителя Kafka с разным идентификатором группы, все они будут читать все разделы и т.д.

Ответ 2

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

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

Ответ 3

У меня есть еще один вопрос. Если у нас есть 2 разных экземпляра приложения, имеющих одинаковые group.id и same consumer.id, сообщение будет прочитано только одним приложением или обоими приложениями?