M03·03Kafka Explicado de Forma Simples

CAPÍTULO 03

Kafka Explicado de Forma Simples

Brokers, topics, partições, producers e consumer groups — os quatro componentes do Kafka sem jargão desnecessário.

Por Thiago Souza10 min de leituraAtualizado em 2026-05

A Grande Analogia: Kafka é um Correio Industrial

Esqueça por um momento que Kafka é "um sistema de mensageria distribuído tolerante a falhas". Pense nele como um gigantesco correio digital, mas com superpoderes:

  • Aceita milhões de cartas por segundo.
  • Nunca esquece uma carta (até você mandar esquecer).
  • Várias pessoas podem ler a mesma carta sem que ela suma.
  • Você pode "voltar no tempo" e reler cartas antigas.

Os 4 Componentes Principais

flowchart LR
  P["Producers\nEnviam mensagens"] -->|"publicam"| T["Topics\nParticionados por chave"]
  T -->|"entregam"| C["Consumer Groups\nLêem em paralelo"]
  B["Brokers\nCluster de servidores"] -.-|"hospedam"| T

Brokers — As Agências dos Correios

Um broker é um servidor Kafka. Sozinho ele já funciona, mas em produção você roda vários (3, 5, 7) formando um cluster. Vários brokers significam:

  • Tolerância a falha: se um cair, os outros continuam.
  • Escala: mais brokers = mais capacidade.
  • Replicação: cada mensagem é copiada em vários brokers.

Topics e Partições — As Caixas de Cartas Categorizadas

Um topic é um canal nomeado onde mensagens são organizadas. Você cria topics como pedidos, pagamentos, usuarios-cadastrados, etc.

Mas tem um detalhe MUITO importante: cada topic é dividido em partições.

flowchart TD
  T["Topic: pedidos"] --> P0["Partição 0<br/>msg1, msg2, msg3, ..."]
  T --> P1["Partição 1<br/>msg1, msg2, msg3, ..."]
  T --> P2["Partição 2<br/>msg1, msg2, msg3, ..."]

Por que partições existem? Para escalar horizontalmente. Cada partição pode ser lida em paralelo por consumers diferentes.

Cada partição é uma sequência ordenada e imutável de mensagens. Cada mensagem tem um número crescente chamado offset.

A ordem é garantida dentro de uma partição, mas não entre partições. Esse é um dos detalhes que mais derruba sistema em produção.

Producers — Quem Escreve Cartas

Producer é qualquer aplicação que envia mensagens pra um topic. Ele decide:

  • Para qual topic mandar.
  • Qual chave (key) usar — opcional, mas crucial para ordenação.
  • O valor (payload) — o conteúdo da mensagem.

Como o Kafka decide em qual partição cai a mensagem?

  • Se você define uma key: Kafka faz hash(key) % numero_de_particoes. Mensagens com a mesma key sempre caem na mesma partição → mantêm ordem.
  • Se não define key: Kafka distribui em round-robin (espalha igualmente).
Use o userId ou pedidoId como key. Assim, todos os eventos de um mesmo pedido caem na mesma partição e mantêm a ordem certinha.

Consumers — Quem Lê Cartas

Consumer é a aplicação que lê mensagens. O conceito mais importante é o de Consumer Group.

Um consumer group é um conjunto de consumers que dividem o trabalho de ler um topic.

Topic "pedidos" (3 partições)
├── Partição 0 ──> Consumer A ┐
├── Partição 1 ──> Consumer B ├── Consumer Group "faturamento"
└── Partição 2 ──> Consumer C ┘

Regras de ouro dos consumer groups:

  1. Cada partição é lida por apenas um consumer dentro de um group.
  2. Mais consumers que partições? Os extras ficam ociosos.
  3. Grupos diferentes leem independentemente. Se você tem o group faturamento e o group notificacoes, cada um lê tudo, do começo ao fim.
                ┌─> Group "faturamento" (lê tudo)
Topic "pedidos" ┤
                └─> Group "notificacoes" (também lê tudo)

Offsets: cada consumer group guarda em qual offset (posição) ele parou em cada partição. Se ele cair e voltar, retoma de onde estava.