Consumer Groups e Particionamento
Consumer groups por dentro
Entendendo distribuicao de particoes, membros e rebalance.
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.createdexistente. - 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.goservices/payment-service/internal/config/kafka.goinfra/kafka/topics/create-topics.shdocs/architecture/kafka-scaling.md
Passo a passo com codigo
- Configure
group.idfixo no payment:
environment:
KAFKA_GROUP_ID: payment-consumers-v1
- Garanta 3 particoes no topico:
kafka-topics --bootstrap-server localhost:9092 \
--alter --topic order.created --partitions 3
- Adicione log de atribuicao de particoes:
func onAssign(memberID string, partitions []int32) {
logger.Infow("partitions assigned",
"member_id", memberID,
"partitions", partitions,
)
}
- Suba multiplas instancias:
docker compose up -d --scale payment-service=2
Como testar
- Publique 60 eventos em
order.created. - Veja logs e confirme distribuicao das particoes entre duas instancias.
- Pare uma instancia e observe rebalance.
- Meça tempo de estabilizacao do consumo apos rebalance.
Dicas
- Defina
group.idpor 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.idem 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.