Ответ
Да, работал с обеими системами в 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 |