Чем Kafka принципиально отличается от RabbitMQ?
- В чём разница между Kafka и RabbitMQ по устройству?
Kafka — распределённый журнал: сообщения хранятся заданное время независимо от чтения, потребители сами двигают offset и могут перечитать. RabbitMQ — классический брокер очередей: сообщение удаляется после подтверждения, гибкая маршрутизация через exchange.
- Kafka: партиции, порядок в партиции, огромная пропускная способность, replay
- RabbitMQ: маршрутизация по ключам и шаблонам, приоритеты, TTL, подтверждения на сообщение
- Kafka — «умный клиент, простой брокер»; RabbitMQ — «умный брокер»
А ещё RabbitMQ Streams и Kafka Queues (KIP-932) сближают модели
Подробно
Модель Kafka. Топик разбит на партиции — упорядоченные журналы на диске. Производитель дописывает в конец, потребители читают с позиции (offset), которую сами хранят и фиксируют. Сообщения не удаляются после чтения, а живут по политике хранения (время или размер) — поэтому разные группы потребителей читают независимо, а любую можно перемотать и перечитать историю. Параллелизм — число партиций. Порядок — внутри партиции.
Модель RabbitMQ. Издатель публикует в exchange, который по правилам (direct, topic, fanout, headers) раскладывает сообщения по очередям. Потребитель получает сообщение, обрабатывает и подтверждает (ack) — после этого оно удаляется. Брокер следит за каждым сообщением: повтор неподтверждённых, DLX, TTL, приоритеты.
Следствия:
| Kafka | RabbitMQ | |
|---|---|---|
| хранение | журнал, по времени | до подтверждения |
| перечитывание | да | нет (кроме Streams) |
| маршрутизация | по топикам и ключу | гибкая, exchange и bindings |
| порядок | в партиции | в очереди при одном потребителе |
| пропускная способность | сотни тысяч–миллионы в секунду | десятки тысяч |
| состояние потребителя | offset у клиента | у брокера на сообщение |
Что хотят услышать
- Журнал против очереди: хранение и перечитывание.
- Offset у клиента против подтверждений на сообщение.
- Маршрутизация, порядок, пропускная способность.
Частые ошибки
- Считать Kafka «быстрой очередью».
- Думать, что из RabbitMQ можно перечитать обработанные сообщения.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Kafka удаляет сообщение сразу после подтверждения, а RabbitMQ хранит его заданное время
- ✓Kafka — журнал: сообщения хранятся по сроку, потребитель сам двигает offset и может перечитать; RabbitMQ — очередь, сообщение удаляется после подтверждения
- ✗Это одна модель, Kafka просто быстрее за счёт сжатия сообщений
- ✗RabbitMQ хранит историю для перечитывания, а Kafka поддерживает только доставку в реальном времени
Что спросят дальше
- Что такое consumer group в Kafka?
- Какие exchange-типы есть в RabbitMQ?
Разбор темы
- RabbitMQ, SQS и классические очереди
Модель exchange/binding/queue, ack/nack и publisher confirms, prefetch, DLQ через DLX, отложенные сообщения, SQS Standard vs FIFO и visibility timeout.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.