Apache Kafka
Event streaming distribuido, producers, consumers e integracao com .NET via Confluent.Kafka
Kafka nao e um message broker tradicional β e uma plataforma de event streaming distribuido baseada em commit log. Mensagens sao persistidas e podem ser re-lidas a qualquer momento.
Kafka como Distributed Commit Log
Kafka armazena mensagens como um log append-only distribuido. Producers escrevem no final do log, consumers leem de qualquer posicao (offset). Diferente de brokers tradicionais, mensagens nao sao deletadas apos consumo.
Termos-chave
| Termo | Descricao |
|---|---|
| Broker | Um servidor Kafka. O cluster e composto por multiplos brokers. |
| Topic | Categoria logica de mensagens (ex: "orders", "payments"). |
| Partition | Unidade de paralelismo dentro de um topic. Cada partition e um log ordenado. |
| Offset | Indice sequencial de cada mensagem dentro de uma partition. Imutavel. |
| Segment | Arquivo fisico no disco. Uma partition e dividida em segments. |
| Leader | Broker responsavel por leituras e escritas de uma partition. |
| Follower | Replica que copia dados do leader. Assume se o leader cair. |
| ISR | In-Sync Replicas β conjunto de replicas atualizadas com o leader. |
| Replication Factor | Quantas copias de cada partition existem (ex: 3 = 1 leader + 2 followers). |
Como dados sao armazenados
Cada partition e um log append-only dividido em segments. Retencao e configuravel por tempo (retention.ms) ou tamanho (retention.bytes). Mensagens expiradas sao removidas por segment, nao individualmente.
Kafka nao deleta mensagens apos consumo β o consumer controla sua posicao (offset). Isso permite replay, auditoria e multiplos consumers independentes.
Cluster: ZooKeeper vs KRaft
| Aspecto | ZooKeeper (legado) | KRaft (Kafka 3.3+) |
|---|---|---|
| Metadados | Armazenados no ZooKeeper externo | Armazenados nos proprios brokers |
| Componentes | Cluster Kafka + cluster ZooKeeper separado | Apenas brokers Kafka |
| Operacao | Mais complexa (dois sistemas) | Simplificada |
| Escalabilidade | ZK e gargalo para muitas partitions | Escala melhor (milhoes de partitions) |
Como o Kafka difere de um message broker tradicional como RabbitMQ?
Kafka e um log distribuido β mensagens sao persistidas em disco e nao sao removidas apos consumo. Consumers controlam sua posicao (offset), permitindo replay. RabbitMQ e um message broker que remove mensagens apos ack. Kafka oferece throughput muito maior (milhoes/seg), mas RabbitMQ oferece routing mais flexivel (exchanges, bindings). Kafka garante ordem por partition; RabbitMQ garante ordem por fila.