Consumer Groups e Particionamento

Consumer groups por dentro

Entendendo distribuicao de particoes, membros e rebalance.

Avançado 35 min 30 pontos Leitura 0%

Nesta aula você vai

  • Entender como particoes sao distribuidas entre membros do grupo
  • Medir impacto de rebalance no throughput do payment-service
  • Configurar group id estavel para escala horizontal segura

Consumer groups por dentro

Objetivos

  • Entender como particoes sao distribuidas entre membros do grupo
  • Medir impacto de rebalance no throughput do payment-service
  • Configurar group id estavel para escala horizontal segura

Pré-requisitos

  • Kafka local ativo com docker compose up -d.
  • Topico order.created existente.
  • Payment Service consumindo eventos no ambiente.

Conceito

No Kafka, um consumer group processa mensagens de um topico sem duplicar particao entre membros do mesmo grupo.

Escala real depende do numero de particoes. Se existem 3 particoes, no maximo 3 consumidores processam em paralelo nesse grupo.

Estrutura de arquivos

  • services/payment-service/internal/consumers/order_created_consumer.go
  • services/payment-service/internal/config/kafka.go
  • infra/kafka/topics/create-topics.sh
  • docs/architecture/kafka-scaling.md

Passo a passo com codigo

  1. Configure group.id fixo no payment:
environment:
  KAFKA_GROUP_ID: payment-consumers-v1
  1. Garanta 3 particoes no topico:
kafka-topics --bootstrap-server localhost:9092 \
  --alter --topic order.created --partitions 3
  1. Adicione log de atribuicao de particoes:
func onAssign(memberID string, partitions []int32) {
  logger.Infow("partitions assigned",
    "member_id", memberID,
    "partitions", partitions,
  )
}
  1. Suba multiplas instancias:
docker compose up -d --scale payment-service=2

Como testar

  1. Publique 60 eventos em order.created.
  2. Veja logs e confirme distribuicao das particoes entre duas instancias.
  3. Pare uma instancia e observe rebalance.
  4. Meça tempo de estabilizacao do consumo apos rebalance.

Dicas

  • Defina group.id por funcao de negocio, nao por instancia.
  • Planeje deploys para reduzir rebalances frequentes.
  • Monitore lag antes, durante e depois do rebalance.
  • Aumente particoes antes de aumentar replicas.

Erros comuns

  • Esperar ganho infinito so aumentando replicas.
  • Trocar group.id em cada deploy.
  • Nao instrumentar log/metricas de atribuicao.
  • Confundir grupos diferentes com alta disponibilidade.

Resumo

Consumer groups permitem escalar processamento sem duplicar leitura no mesmo grupo, desde que o numero de particoes e a estrategia de deploy sejam planejados.