Имели ли вы опыт работы с Kafka или RabbitMQ?

«Имели ли вы опыт работы с Kafka или RabbitMQ?» — вопрос из категории Брокеры сообщений, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, работал с обеими системами в production-средах. Вот сравнительный анализ:

Apache Kafka — для потоковой обработки больших объемов данных:

// Producer с Confluent.Kafka
var config = new ProducerConfig 
{ 
    BootstrapServers = "kafka1:9092,kafka2:9092",
    Acks = Acks.All,
    EnableIdempotence = true
};

using var producer = new ProducerBuilder<string, string>(config).Build();
var message = new Message<string, string>
{
    Key = "user-123",
    Value = JsonSerializer.Serialize(userEvent),
    Headers = new Headers { new Header("event-type", Encoding.UTF8.GetBytes("UserCreated")) }
};

await producer.ProduceAsync("user-events", message);

RabbitMQ — для точечной доставки сообщений и RPC:

// Publisher с подтверждениями
channel.ConfirmSelect(); // Publisher confirms
channel.BasicPublish(
    exchange: "orders",
    routingKey: "new.order",
    mandatory: true,
    basicProperties: props,
    body: Encoding.UTF8.GetBytes(orderJson)
);

// Consumer с QoS
channel.BasicQos(prefetchSize: 0, prefetchCount: 10, global: false);
channel.BasicConsume(queue: "orders", autoAck: false, consumer: consumer);
Ключевые различия: Аспект Kafka RabbitMQ
Модель Log-based, сохраняет все Queue-based, удаляет после обработки
Скорость ~100K msg/sec на ноде ~20K msg/sec на ноде
Группы потребителей Поддерживаются natively Через отдельные очереди
Ретеншен По времени/размеру После подтверждения
Использование Аналитика, стриминг Фоновые задачи, RPC