В своем блоге Sijie называет общий обмен сообщениями очередями. С помощью обмена сообщениями в очереди создается несколько потребителей для получения сообщений из одной темы. Какой потребитель получает сообщение совершенно случайно.
Проблема реализации шаблона обмена сообщениями с Kafka заключается в том, что потребители Kafka отмечают, что они приняли сообщение. Потребители Kafka используют так называемый верхний водяной знак для смещения потребителей. Это означает, что потребитель может только сказать: «Я обработал до этого момента», а не «Я обработал это сообщение».
Рассмотрим сценарий, в котором несколько потребителей Kafka из одной и той же группы потребителей обрабатывали один и тот же тематический раздел, и один из потребителей отказывал из-за исключения, а другой - успешно. Поскольку у Kafka нет встроенного способа подтверждения только одного сообщения, а используется только верхняя отметка, ошибочное сообщение будет ошибочно помечено как использованное, хотя на самом деле оно не удалось и его необходимо либо повторно обработать, либо опубликовать для очередь ошибок и т. д.
Чтобы избежать этой ситуации, вам нужно иметь только одного потребителя на раздел, что ограничивает пропускную способность раздела. Что, в свою очередь, требует от вас увеличения количества разделов для удовлетворения ваших потребностей в пропускной способности.
В этом блоге есть подробное объяснение