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

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

Ответ

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

Apache Kafka — это распределенный, отказоустойчивый журнал событий (log), оптимизированный для обработки потоков данных с высокой пропускной способностью.

  • Модель доставки: Публикация-подписка на основе партиционированного журнала. Сообщения сохраняются на диске с настраиваемой политикой хранения (дни, недели).
  • Гарантии: Гарантированный порядок сообщений в пределах партиции. Сообщения не удаляются после чтения потребителем.
  • Использование: Стриминг данных, Event Sourcing, сбор логов, метрик, построение пайплайнов реального времени.
  • Масштабирование: Горизонтальное за счет увеличения числа партиций в топике.

RabbitMQ — это классический брокер сообщений, реализующий протокол AMQP, ориентированный на гибкую маршрутизацию и гарантированную доставку.

  • Модель доставки: Гибкая маршрутизация через exchanges (direct, topic, fanout, headers). Очереди создаются потребителями. Сообщения удаляются после подтверждения доставки (ACK).
  • Гарантии: Поддержка транзакций, подтверждений (ACK/NACK), Dead Letter Exchanges для надежности.
  • Использование: Фоновая обработка задач (Task Queues), RPC, сложная маршрутизация сообщений между микросервисами.
  • Масштабирование: Вертикальное или через кластеризацию (очереди привязаны к узлам).
Сравнение в таблице: Критерий Apache Kafka RabbitMQ
Основная абстракция Упорядоченный журнал (лог) с партициями Очередь сообщений с гибкой маршрутизацией
Хранение сообщений Долгосрочное (на диске, по retention policy) Краткосрочное (до подтверждения потребления, может сбрасываться на диск)
Пропускная способность Очень высокая (миллионы сообщений/сек) Высокая (десятки тысяч сообщений/сек)
Латентность Низкая (миллисекунды) Очень низкая (микросекунды)
Протокол Собственный (бинарный TCP), есть HTTP API В первую очередь AMQP 0.9.1, также STOMP, MQTT.

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

  • Выбрать Kafka: Нужно обрабатывать поток кликов с сайта, строя в реальном времени дашборд. Сообщения ценны как исторические данные.
  • Выбрать RabbitMQ: Нужно распределить задачи по генерации PDF-отчетов между несколькими воркерами. Каждая задача должна быть выполнена ровно один раз.

В современных системах их могут использовать вместе: RabbitMQ — для межсервисного взаимодействия (команды), Kafka — для централизованного сбора и распространения событий (events).