Entendendo o Kafka

Anatomia de um Tópico

Anatomia de um Tópico
Apache Kafka Java Messaging Microsserviços
Post originalmente publicado em dev.to.

Aprofundando um pouco mais no Kafka, precisamos entender o que é um Tópico e como ele se comporta. Tópico é um dos conceitos mais básicos do Kafka! Está presente em quase tudo.

Sobre Tópico podemos falar:

Nomenclatura

Daqui pra frente, precisamos definir alguns nomes. Sempre que falamos de uma instalação do Kafka, estamos falando de um broker Kafka, isso significa, um servidor ou uma instância. Esse broker faz parte de um conjunto maior, que é o cluster Kafka. O cluster é um conjunto de brokers que atuam como se fossem um sistema só. Os dados fazem parte do cluster e podem estar em um ou mais broker.

Criação

Vamos olhar para criação de um Tópico para tentar entender mais:

.\bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test

Dada a linha acima podemos identificar alguns parâmetros para criação de um tópico:

Anatomia de um Tópico

Podemos assim definir que um Tópico é distribuído entre partições. Cada partição é uma armazena parte das mensagens enviadas, estas, por sua vez, são distribuídas entre as partições de acordo com a chave associada a ela.

As mensagens são armazenadas sequencialmente dentro de uma partição, assim, cada mensagem terá associada um número de partição e um _offset. Este offset é a posição da mensagem dentro da partição.

Distribuição

Ao se criar um tópico, as partições do mesmo são distribuídas entre os borkers. Não necessariamente todas as mensagens serão armazenadas juntas.

Cada mensagem é envida para apenas uma partição, essa distribuição é feita baseada na chave associada a mensagem. Assim, mensagens com a mesma chave, irão para a mesma partição. Isso é importante!

Estrutura de Arquivos

Uma partição é um arquivo de log. Quando o broker recebe uma mensagem, ela é adicionada ao final da partição. A essa mensagem é associado um offset.

Com isso para se localizar exatamente onde uma mensagem está armazenada é preciso observar os valores:

Todos esses valores estão presentes em RecordMetadata e ConsumerRecord.

Replicação

No Kafka, é possível haver replicação de dados. Para isso é preciso que exista ao menos um broker configurado.

Utilizando o parametro replication-factor da criação do tópico, cada partição será replicada em um broker diferente. Assim o valor máximo para esse parâmetro é o número de brokers existente.

Ordenação das Mensagens

As mensagens de uma partição serão enviadas a apenas um consumer, não haverá mais de um consumer para uma partição. Assim, as mensagens da partição serão entregues em ordem cronológica.

Vale lembrar que o Kafka não garante a ordenação global das mensagens enviadas. Mas dada uma boa escolha da chave das mensagens, é possível garantir a ordenação das mensagens associadas.

Por exemplo, se estamos consumindo mensagens de acesso de usuários. Podemos usar o id do usuário como chave, assim todas as mensagem de um mesmo usuário serão consumidas em ordem cronológica, evitando erros de consistência dos dados.

Licença Creative Commons
Este obra está licenciado com uma Licença Creative Commons Atribuição-NãoComercial-CompartilhaIgual 4.0 Internacional .
Escrito em 15/maio/2020