DEV Community

Danilo O. Pinheiro, dopme.io
Danilo O. Pinheiro, dopme.io

Posted on

Comunicação com Apache Kafka Usando .NET Moderno

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
Enter fullscreen mode Exit fullscreen mode

Inicie com:

docker-compose up -d
Enter fullscreen mode Exit fullscreen mode

📦 Instalando o pacote NuGet

dotnet new console -n KafkaDemo
cd KafkaDemo
dotnet add package Confluent.Kafka
Enter fullscreen mode Exit fullscreen mode

✉️ 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}");
Enter fullscreen mode Exit fullscreen mode

📥 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}");
}
Enter fullscreen mode Exit fullscreen mode

📊 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.