В чем разница между Apache Kafka и RabbitMQ?

«В чем разница между Apache Kafka и RabbitMQ?» — вопрос из категории Архитектура, который задают на 28% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Kafka и RabbitMQ — это системы обмена сообщениями, но с разными архитектурными моделями, подходящими для разных задач.

Аспект RabbitMQ (брокер сообщений) Apache Kafka (распределенный лог-журнал)
Основная модель Точка-точка (очереди) и Издатель-Подписчик (exchange). Поток событий, сохраняемый в партиционированном логе.
Гарантии доставки Подтверждения (ACK) от потребителя. Сообщение удаляется после обработки. Сообщения сохраняются на диске с репликацией. Чтение не удаляет данные.
Производительность Высокая, оптимизирована для сложной маршрутизации и гарантий. Очень высокая пропускная способность (миллионы сообщений/сек) и низкая задержка.
Хранение данных В основном в памяти, сообщения удаляются после подтверждения обработки. Данные хранятся на диске заданное время (дни/недели).
Использование Фоновая обработка задач (job queues), RPC, сложная маршрутизация. Потоковая обработка данных (stream processing), аналитика в реальном времени, event sourcing.

Пример сценариев:

  • RabbitMQ: Система обработки заказов в интернет-магазине. Платежный сервис публикует сообщение payment.completed в exchange, а отдельные очереди для службы доставки и службы уведомлений получают его копии для параллельной обработки.
  • Kafka: Сбор телеметрии с мобильных приложений. Тысячи клиентов пишут события (click, view) в топик user-events. Далее несколько независимых потребителей (система рекомендаций, аналитическая панель, мониторинг) читают этот поток с разной скоростью и со своей позиции.

В моих проектах RabbitMQ часто использовался для оркестрации микросервисов, а Kafka — как backbone для передачи потоковых данных между системами.