Em arquiteturas orientadas a eventos e microsserviços, o Apache Kafka se tornou uma das tecnologias mais utilizadas para processar grandes volumes de dados em tempo real com confiabilidade, performance e escalabilidade.
Neste artigo, vamos explorar como integrar .NET 8 com o Apache Kafka, criando aplicações produtoras e consumidoras com a biblioteca oficial Confluent.Kafka
.
📌 O Que é o Kafka?
O Apache Kafka é uma plataforma de streaming distribuída desenvolvida para lidar com grandes volumes de dados. Ele funciona como um sistema de mensagens publish-subscribe com tolerância a falhas e persistência.
🧰 Tecnologias Utilizadas
- .NET 8
- Docker & Docker Compose
- Apache Kafka 3.x
-
Confluent.Kafka
(client oficial para .NET)
🐳 Subindo o Kafka com Docker
Crie um arquivo docker-compose.yml
:
version: '3.8'
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.5.0
environment:
ZOOKEEPER_CLIENT_PORT: 2181
kafka:
image: confluentinc/cp-kafka:7.5.0
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
Inicie com:
docker-compose up -d
📦 Instalando o pacote NuGet
dotnet new console -n KafkaDemo
cd KafkaDemo
dotnet add package Confluent.Kafka
✉️ Criando um Produtor Kafka
using Confluent.Kafka;
var config = new ProducerConfig
{
BootstrapServers = "localhost:9092"
};
using var producer = new ProducerBuilder<Null, string>(config).Build();
var result = await producer.ProduceAsync("demo-topic",
new Message<Null, string> { Value = "Olá, Kafka com .NET!" });
Console.WriteLine($"Mensagem enviada: {result.Value} para {result.TopicPartitionOffset}");
📥 Criando um Consumidor Kafka
using Confluent.Kafka;
var config = new ConsumerConfig
{
BootstrapServers = "localhost:9092",
GroupId = "demo-consumer-group",
AutoOffsetReset = AutoOffsetReset.Earliest
};
using var consumer = new ConsumerBuilder<Ignore, string>(config).Build();
consumer.Subscribe("demo-topic");
Console.WriteLine("Aguardando mensagens...");
while (true)
{
var cr = consumer.Consume();
Console.WriteLine($"Mensagem recebida: {cr.Message.Value}");
}
📊 Monitorando e Gerenciando o Kafka
Você pode usar interfaces como:
Adicione ao docker-compose.yml
se desejar facilitar o monitoramento.
⚙️ Boas Práticas com Kafka no .NET
Prática | Recomendações |
---|---|
Serialização | Use Avro ou JSON |
Partições e performance | Defina tópicos com múltiplas partições |
Escalabilidade | Distribua consumidores por grupo |
Tolerância a falhas | Configure retries e logs |
Observabilidade | Use tracing e métricas (ex: OpenTelemetry) |
🔄 Kafka vs ActiveMQ vs RabbitMQ (Resumo)
Recurso | Kafka | RabbitMQ | ActiveMQ |
---|---|---|---|
Throughput alto | ✅ | ⚠️ | ⚠️ |
Streaming real-time | ✅ | ❌ | ❌ |
Garantia de entrega | ✅ | ✅ | ✅ |
Complexidade de setup | Médio | Baixo | Médio |
Suporte a .NET | Excelente | Excelente | Bom |
🤝 Conecte-se Comigo
Estou sempre aberto a trocar ideias sobre .NET, mensageria e sistemas distribuídos. Vamos nos conectar:
Top comments (0)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.