Ответ
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 для передачи потоковых данных между системами.
Видео-ответы
▶
▶
▶
▶
▶