Ответ
Message Broker (брокер сообщений) — промежуточное ПО, обеспечивающее асинхронный обмен сообщениями между компонентами системы (производителями и потребителями). Он решает задачи декаплинга сервисов, буферизации нагрузки и надёжной доставки.
RabbitMQ vs Apache Kafka: сравнение и применение
| Аспект | RabbitMQ (AMQP) | Apache Kafka |
|---|---|---|
| Модель | Точка-точка (очереди), Pub/Sub (Exchange) | Публикация/подписка на основе логов (log-based). Сообщения хранятся. |
| Главная цель | Надёжная доставка, маршрутизация сообщений, RPC. | Обработка потоков событий в реальном времени, хранение и воспроизведение данных. |
| Гарантии | Подтверждения (ack), persistence, dead letter exchanges. | Высокая пропускная способность, долговременное хранение, гарантия порядка в партиции. |
| Идеально для | Фоновые задачи, распределение работы между воркерами, микросервисная коммуникация. | Потоковая аналитика, event sourcing, сбор логов, мониторинг в реальном времени. |
Пример отправки сообщения в RabbitMQ (Java):
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
// Объявляем очередь
channel.queueDeclare("task_queue", true, false, false, null);
// Публикуем сообщение
String message = "New task #42";
channel.basicPublish("", "task_queue",
MessageProperties.PERSISTENT_TEXT_PLAIN,
message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
}
Пример отправки события в Kafka (Java):
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
try (Producer<String, String> producer = new KafkaProducer<>(props)) {
// Отправка записи в топик
ProducerRecord<String, String> record =
new ProducerRecord<>("user-events", "user123", "{"action":"login"}");
producer.send(record);
// send() асинхронный, можно добавить callback для обработки результата
}
Опыт применения: RabbitMQ — для фоновой обработки заказов и нотификаций; Kafka — для потоковой аналитики пользовательских действий и репликации данных между системами.