Ответ
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).
Видео-ответы
▶
▶
▶
▶
▶