Entendendo o Apache Kafka I

Leonardo Mello Gaona
luizalabs
Published in
3 min readMar 8, 2018

Oi pessoal, tudo bem com vocês? Meu último artigo e acontecimentos recentes no Magazine Luiza me levaram a iniciar estudos sobre o Apache Kafka. Resolvi então transmitir um pouco do que estou aprendendo à vocês por uma série de artigos na qual pretendo explicar um pouco da teoria e ajudar vocês a colocarem a mão na massa também.

No artigo de hoje, pretendo explicar alguns conceitos básicos Kafka. Vamos lá!

O Apache Kafka é uma plataforma para processamento distribuído de eventos. É uma ferramenta muito versátil e você pode adotá-lo na sua empresa mesmo que não seja seu intuito realizar processamento de streams de eventos, já que os casos de uso do kafka são um pouco:

  • Serviço de mensageria;
  • Desacoplamento na comunicação entre sistemas;

Tópicos e mensagens

No Apache Kafka, toda a interação entre produtores e consumidores é realizada através de tópicos. Tópicos representam fluxos de eventos e desacoplam a comunicação entre sistemas, uma vez que o produtor e o consumidor das mensagens não se conhecem.

Quando um produtor gera uma mensagem no tópico, os consumidores daquele tópico são notificados com uma cópia da mensagem publicada. Não há limites para a quantidade de consumidores que um tópico pode possuir.

Produtores e consumidores não se conhecem, apenas compartilham interesse em tópicos

Internamente, o Kafka quebra os tópicos em partições. O número de partições é indicado quando o tópico é criado e não há limite de partições. Para facilitar a alta disponibilidade, as partições de um tópico são espalhadas entre os brokers do cluster. Abaixo, um diagrama explicando essa separação em partições de um tópico:

Partições e offsets dentro de um tópico

Como pode ser visto na imagem anterior, o tópico possui 23 mensagens separadas em 3 partições. Dentro de cada partição, as mensagens são ordenadas por um metadado chamado offset. O offset serve para ordenar apenas no contexto da partição. Offsets iguais em partições diferentes resultam em mensagens diferentes.

Outra funcionalidade utilizada em conjunto com as partições é o fator de replicação. Assim como o número de partições, o fator de replicação é configurado à cada tópico criado e deve ser um número entre 1 e o número de brokers no cluster. O fator de replicação gera cópias das partições em outros brokers, assim se algum broker ficar indisponível, o Kafka continua sendo capaz de servir as mensagens sem interrupção no serviço.

Abaixo um exemplo de como as partições poderiam ficar dispostas em um cluster com 3 brokers e 1 tópico, sendo o tópico com 2 partições e fator de replicação 2:

Cada partição existe em 2 brokers

No cenário da imagem acima, caso o broker 2 fique indisponível o cluster não é afetado. Para descobrir o número de brokers que podem ser interrompidos sem afetar o cluster basta realizar o cálculo fator de replicação -1. Em nosso exemplo acima, o resultado seria (2 -1 = 1 broker).

Para que o Kafka consiga manter um estado consistente das partições, à todo e qualquer momento um único broker é designado como líder da partição. O líder é o único quem realiza escritas na partição, deixando aos outros brokers a tarefa de sincronizar as réplicas com a partição do líder.

Bom gente, eu entendo que é muita teoria pra digerir em um artigo só, mas é muito importante entender esses conceitos para se aprofundar no prático. No próximo artigo vou falar sobre modos de entrega e grupos de consumidores. Espero que tenham gostado!

Até a próxima!

--

--