← Назад к вопросам

Какие знаешь брокеры сообщений, кроме Kafka?

2.0 Middle🔥 192 комментариев
#Клиент-серверная архитектура

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Популярные брокеры сообщений (Message Brokers) помимо Apache Kafka

Помимо Apache Kafka, существует множество других брокеров сообщений, каждый со своей архитектурой, протоколами и оптимальными сценариями использования. Их можно классифицировать по модели доставки, протоколам и типу работы (очереди или потоковая обработка).

Основные категории и представители

1. Очереди сообщений (Message Queues) на основе протокола AMQP

Эти брокеры следуют модели "очереди" с чётким адресатом сообщения.

  • RabbitMQ — пожалуй, самый известный брокер на AMQP. Очень гибкий, поддерживает множество паттернов (публикация/подписка, рабочие очереди, маршрутизация). Идеален для сложной маршрутизации, RPC и фоновых задач.

    # Пример публикации в RabbitMQ с Pika
    import pika
    connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
    channel = connection.channel()
    channel.queue_declare(queue='hello')
    channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
    connection.close()
    
  • ActiveMQ / ActiveMQ Artemis — классический, многофункциональный брокер от Apache, поддерживающий не только AMQP, но и STOMP, MQTT, OpenWire. Artemis — это высокопроизводительный наследник, написанный на новом коде.

2. Брокеры для облачных сред и управляемые сервисы

Часто используются как сервис от облачных провайдеров.

  • Amazon SQS (Simple Queue Service) — полностью управляемая очередь от AWS. Проста в использовании, масштабируема, интегрирована с другими сервисами AWS. Есть модели Standard (лучшее усилие) и FIFO (гарантия порядка).
  • Azure Service Bus — мощный управляемый брокер от Microsoft, поддерживающий очереди, топики (публикация/подписка) и ретрансляторы. Предоставляет продвинутые функции: сессии, dead-letter очереди, отложенная доставка.
  • Google Cloud Pub/Sub — полностью управляемый сервис обмена сообщениями от Google, ориентированный на глобальную масштабируемость и событийно-ориентированные архитектуры.

3. Высокопроизводительные и потоковые брокеры

Конкуренты Kafka в области обработки потоков данных.

  • Apache Pulsar — современная облачно-нативная альтернатива Kafka. Имеет раздельную архитектуру (вычисления и хранение разнесены), что упрощает масштабирование. Поддерживает как потоковую обработку, так и модели очередей через субскрипции (Exclusive, Shared, Failover, Key_Shared).
    # Пример команды отправки сообщения в Pulsar
    bin/pulsar-client produce my-topic --messages "hello-pulsar"
    
  • NATS / NATS JetStreamNATS — это невероятно быстрый (написан на Go) и простой брокер без сохранения сообщений. NATS JetStream — это надстройка, добавляющая устойчивое хранение, потоковую обработку и семантику "хотя бы раз". Идеален для микросервисов и внутренней связи.

4. Легковесные и специализированные брокеры

  • Redis (с использованием Pub/Sub или Streams) — хотя это прежде всего хранилище "ключ-значение", его возможности Pub/Sub (без сохранения) и особенно Streams (с сохранением, похоже на Kafka-топики) часто используются как простой и быстрый брокер для внутренней коммуникации.
    // Пример подписки на канал Redis Pub/Sub в Node.js
    const redis = require("redis");
    const subscriber = redis.createClient();
    subscriber.subscribe("news");
    subscriber.on("message", (channel, message) => {
        console.log(`Received: ${message} from ${channel}`);
    });
    
  • MQTT-брокеры (Mosquitto, HiveMQ, EMQX) — специализируются на работе с IoT-устройствами. Протокол MQTT очень лёгкий, работает по модели публикации/подписка. Отлично подходит для сценариев с нестабильным соединением и ограниченными ресурсами устройств.
  • ZeroMQ — это скорее библиотека для обмена сообщениями, чем полноценный брокер ("брокерless"-модель). Позволяет строить очень быстрые сокет-соединения между приложениями напрямую (P2P) с различными паттернами (Request/Reply, Pub/Sub, Push/Pull).

Ключевые критерии выбора брокера (для тестирования и проектирования)

При тестировании систем с брокерами сообщений или при обсуждении их выбора важно понимать контекст:

  1. Модель доставки: Нужна очередь (один потребитель на сообщение) или топик (много подписчиков)? Kafka и Pulsar — топики, RabbitMQ — и то, и другое, SQS — только очереди.
  2. Гарантии доставки: "Не более одного раза" (at-most-once), "хотя бы один раз" (at-least-once — как у Kafka по умолчанию), "ровно один раз" (exactly-once — сложнее в настройке).
  3. Производительность и латентность: NATS и ZeroMQ — для сверхнизких задержек, Kafka и Pulsar — для высокой пропускной способности потоков.
  4. Масштабируемость и отказоустойчивость: Как масштабируется — шардированием (Kafka), репликацией (RabbitMQ mirrored queues) или облачной архитектурой (Pulsar, управляемые сервисы).
  5. Экосистема и мониторинг: Наличие коннекторов (Kafka Connect), клиентских библиотек, инструментов для администрирования и мониторинга (Kafka Manager, RabbitMQ Management UI).
  6. Сложность эксплуатации: Управляемые сервисы (SQS, Pub/Sub) снимают операционную нагрузку, но могут быть менее гибкими. Self-hosted решения (Kafka, RabbitMQ) требуют глубоких знаний для настройки и поддержки.

Для QA-инженера понимание этих различий критично для:

  • Планирования интеграционного тестирования и тестирования надёжности (что происходит при потере связи с брокером?).
  • Проверки порядка доставки и идемпотентности обработки дублей.
  • Тестирования под нагрузкой на пропускную способность и латентность.
  • Построения корректных тестовых стендов, имитирующих работу продовой системы (например, использование Embedded Kafka для юнит-тестов вместо развёртывания полноценного кластера).