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.
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).
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:
- Cada partição é lida por apenas um consumer dentro de um group.
- Mais consumers que partições? Os extras ficam ociosos.
- Grupos diferentes leem independentemente. Se você tem o group
faturamentoe o groupnotificacoes, 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.