Какие альтернативы Apache Kafka вы рассматривали или использовали в проектах?

«Какие альтернативы Apache Kafka вы рассматривали или использовали в проектах?» — вопрос из категории Брокеры сообщений, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Выбор альтернативы Kafka зависит от конкретных требований: throughput, latency, сложность администрирования и облачной инфраструктуры.

Основные альтернативы:

  1. RabbitMQ (AMQP): Классический брокер сообщений. Подходит для систем, где важна гибкая маршрутизация (exchanges, queues) и не требуются экстремальные throughput и retention, как у Kafka.

    // Пример публикации сообщения в RabbitMQ
    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 = "Hello, RabbitMQ!";
        channel.basicPublish("", "task_queue", 
                MessageProperties.PERSISTENT_TEXT_PLAIN,
                message.getBytes());
    }
  2. Apache Pulsar: Современная альтернатива с архитектурой, отделяющей хранение от обработки. Ключевые преимущества: мультитенантность, сегментированное хранение, низкая задержка потребления и встроенная поддержка нескольких моделей (pub/sub, очередь).

  3. Облачные managed-сервисы:

    • AWS SQS/SNS: Простота использования, интеграция с другими AWS-сервисами. SQS — для очередей, SNS — для pub/sub.
    • Google Cloud Pub/Sub: Полностью управляемый сервис с гарантированной доставкой и глобальной репликацией.
  4. NATS/JetStream: Легковесный брокер для сценариев с ultra-low latency. JetStream добавляет persistence и streaming-возможности.

Когда Kafka может быть избыточна? При относительно низких нагрузках, когда не требуется долгосрочное хранение логов или потоковая обработка в реальном времени, а важнее простота настройки и эксплуатации.