Conceitos e dinâmica básica de funcionamento

Funcionamento do Apache kafka

Representação

Conceitos

Producer

Responsável pelo envio de mensagens (eventos) para o Apache Kafka.

Consumer lê os dados contidos dentro das partições.

Kafka Cluster

Conjunto de Brokers no Kafka.

Cada Broker é responsável por armazenar os dados de uma partição.

Cada partição de um Topic está distribuído em diferentes Brokers.

Brokers: é uma máquina (server) com o Kafka instalado nela, com isso podendo armazenar, processar, disponibilizar as mensagens

Replication Factor

Replicar as partições em brokers diferentes.

Apache ZooKeeper

É um serviço de Service Discovery que verificará o status das máquinas (Brokers) e caso algum desses Brokers não estiver saudável, o ZooKeeper faz o rebalanceamento de responsabilidades, e assim define um novo líder do Topic afetado.

Consumer (aplicação)

Responsável pela leitura das mensagens(eventos) armazenadas no Kafka.

  • OBS: o Kafka não envia mensagem para o consumer

Consumer Groups

Aumenta a vazão dos dados (mensagens).

IMPORTANTE: 1 partição para 1 consumer (Kafka não permite ter 1 partição para 2 ou + consumer).

Topic

É o canal de comunicação (stream de dados) responsável por receber e disponibilizar os dados enviados para o Kafka. Todos as mensagens são salvas em um banco de dados em disco, ou seja, cada tópico tem seu “local” de armazenamento dos seus dados.

OBS: mesmo tendo as mensagens salvas em disco, a leitura e escrita é feita de forma extremamente rápida.

Um tópico possui diversas partições.

Cada mensagem possui um índice (offset) que será utilizado pelo consumidor para recuperá-lo, como mostrado na imagem a seguir:

Os tópicos são como “logs”, pois ficam armazenados em disco além do Kafka fornecer uma política de retenção das mensagens.

Registro

Composto por alguns metadados: headers, key, value e timestamp

Partições

Cada tópico pode ter uma ou mais partições afim de garantir a distribuição e resiliência de seus dados (mensagens e suas réplicas).

Cada partição é definido por um número, como mostrado no exemplo a seguir: 0, 1, 2, ...

Não é obrigatório definir a quantidade de partições ao criar um tópico.

OBS: quanto mais partições, menores são as chances de perda de dados

Partições distribuídas

Cópias de cada partição distribuídas em vários brokers, com isso evitando a perda de mensagens.