Sobes.tech
Back to questions
Middle
3

В чём отличие между Kafka и RabbitMQ?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

Kafka и RabbitMQ — это популярные брокеры сообщений, но они имеют разные архитектурные подходы и сценарии использования.

  • Kafka — это распределённая платформа потоковой передачи данных, ориентированная на высокую пропускную способность и хранение сообщений в виде логов. Она хорошо подходит для обработки больших объёмов данных, событийного стриминга и систем с высокой нагрузкой. Kafka сохраняет сообщения на диске и позволяет нескольким потребителям читать данные независимо друг от друга.

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

Ключевые отличия:

Характеристика Kafka RabbitMQ
Модель Лог сообщений (топики, партиции) Очереди и обменники (exchanges)
Хранение сообщений Долговременное, на диске Обычно удаляются после доставки
Поддержка протоколов Собственный протокол AMQP, MQTT, STOMP и др.
Подход к потреблению Потребители читают по смещению Сообщения удаляются после обработки
Сценарии использования Аналитика, стриминг, большие данные Интеграция, обработка задач, гарантированная доставка

Пример использования Kafka в Go (производитель):

package main

import (
    "github.com/segmentio/kafka-go"
    "context"
    "log"
)

func main() {
    writer := kafka.NewWriter(kafka.WriterConfig{
        Brokers: []string{"localhost:9092"},
        Topic:   "example-topic",
    })
    defer writer.Close()

    err := writer.WriteMessages(context.Background(),
        kafka.Message{
            Key:   []byte("Key-A"),
            Value: []byte("Hello Kafka"),
        },
    )
    if err != nil {
        log.Fatal("failed to write messages:", err)
    }
}

RabbitMQ в Go обычно используют библиотеку github.com/streadway/amqp для работы с AMQP протоколом.