Pular para conteúdo

Mensageria com Kafka e RabbitMQ (visão DevOps)

O que é

Mensageria permite comunicação assíncrona entre serviços. Kafka e RabbitMQ atendem necessidades diferentes: - Kafka: streaming distribuído e retenção de eventos. - RabbitMQ: fila orientada a roteamento e processamento de tarefas.

Por que isso existe

Acoplamento síncrono entre serviços aumenta latência e reduz resiliência. Com mensageria, é possível absorver picos, desacoplar produtores/consumidores e escalar independentemente.

Como funciona internamente

Event Driven Architecture

Producer -> Broker/Topic/Queue -> Consumer

Kafka

  • Log distribuído por topics e partitions.
  • Ordem garantida por partição.
  • Controle de consumo por offset.

RabbitMQ

  • Producer publica em exchange.
  • Exchange roteia para queues por binding key.
  • Consumer faz ack manual/automático.

Exemplos práticos

Kafka CLI

kafka-topics --create --topic orders --partitions 6 --replication-factor 3 --bootstrap-server broker:9092
kafka-console-producer --topic orders --bootstrap-server broker:9092
kafka-consumer-groups --describe --group order-worker --bootstrap-server broker:9092

RabbitMQ CLI

rabbitmqctl list_queues name messages consumers
rabbitmqctl list_exchanges name type
rabbitmq-diagnostics check_running

Padrões operacionais

  • DLQ para mensagens inválidas.
  • Retry com backoff e limite de tentativas.
  • Métricas de lag, throughput, taxa de erro e tempo de processamento.

Boas práticas

  • Definir contrato de evento com versionamento de schema.
  • Implementar idempotência no consumidor.
  • Configurar retenção e compactação conforme caso de uso.
  • Planejar particionamento com chave estável para balanceamento.

Armadilhas comuns

  • Acreditar em "exactly once" ponta a ponta sem considerar aplicação.
  • Reprocessar eventos sem controle de duplicidade.
  • Não monitorar consumer lag em produção.