Skip to content

Eliezer090/Kafka

Repository files navigation

Apache Kafka

Full Cycle - Apache Kafka do Zero
Aqui tento dar um resumão do que é seria o Apache kafka e qual seria sua utilidade, tem muito mais coisa que não está abordado aqui, sugirro acompanhar a documentação do kafka de fato para ver todo seu potencial.

O que é o Kafka:

  • Sistema de logs "Streeaming de dados"(Banco de dados mas sem tabelas, só um log uma msg em baixo da outra), ele pega o log e guarda espera o consumer e após o consumer ler ele ainda guarda esta informação por um tempo especifico ou para sempre(Isto eu defino) isso da uma segurança maior.
  • Latencia de 2ms
  • Raplication Factor(Replicar a mesma infromação em brokers diferentes para garantir que o dado esteja sempre disponivel)

Como o kafka é extruturado:

É separado da seguinte maneira:

  • Brokers (Que seriam os servidores Kafka ou mas maquinas no caso)
  • Topic (Cada broker pode ter N topics, topics seriam nome das filas, em um e-commerce seria Carrinho por exemplo, ou podemos definir como um armário o topic)
  • Partitions (Podemos ter N partitions dentro de cada topic, essas partitions seriam gavetas por exemplo de um topic)

Producers e Consumers

Dentro da extrutura do kafka temos os Producers e os Consumers:

  • Producers seriam quem gera os dados, é quem envia os dados para o kafka
  • Consumers seriam os consumidores de fato deste topic, deve ser detacado aqui que o Consumer se conecta nas partitions do topic, abaixo é detalhado melhor este ponto. A quantidade de consumers deve ser relativa a quantidade de partitins que temos no topic, ex:
  • 1 topic=Carrinho
  • 3 partitions
  • 4 consumers do group=X
  • 3 consumers do group=Y
  • 2 consumers do group=Z
  • Conectamos os consumers ao topic Carrinho, a quantidade consumers do group=X é maior do que a partitions, então 1 desses consumers ficará sem receber dados, pois cada partition irá se conectar com 1 consumer do mesmo group se a quantidade for >=, já se conectarmos os consumers do group=Y, teremos 1 partition para cada consumer, e se conectarmos os consumers do group=Z teremos 1 consumer com 2 partitions e o outro consumer com 1 partition.

Exeplicações em linhas gerais:

Cuidar pois o Kafka tem a questao das partições que cada topico tem, pois a partição nunca vai se comunicar com o mesmo consumer do mesmo group, é isso que a imagem abaixo diz, um Goup com varios consumers consumindo de dois topics diferentes, mas o mesmo consummer pode se comunicar com mais de uma partição:

Ou seja o numero de consumers e topics deve ser o mesmo, se o numero de consumers ser maior que o numero de partições daquele Topic, algum consumer vai ficar sem receber dados.

Diferença entre mensageria e streeaming de dados(Kafka):

  • Mensageria:
    Pedido X foi comprado pelo cliente Y que pagou com cartao B....
  • Streeaming de dados(Kafka):
    Auditoria de infromações, onde a infromação precisa ser distribuida para todos os consumers(Aqui pode ter mais de um) de uma forma rapida e esta informação nao pode ser perdida. Um exemplo é o PubSub que faz basicamente a mesma coisa, de distribuir a mesma mensagem par todos os consumers, kafka recebe qualquer tipo de dados mas nao substitui um banco de dados pois nao existe tabelas ele sim é um sistema de LOGS.

Onde seria util aplicar o kafka de fato:

  • Aplicar para uma comunicação de um cliente, por exemplo o cliente manda a msg para um proxy que se passa por uma api rest mas por baixo esse proxy vai mandar a requisição para o kafka.
  • Serviço de mensageria onde nao posso perder os dados por x tempo, mas tenho que ter uma alta vazão destes dados para algum/s consumer/s lerem, podendo resgatar o histórico do que já foi feito.
  • Comunicação entre o meu banco de dados e outras aplicações, tenho um trabalho de levar algumas informações de uma ponta para outra para isso temos o Kafka connect que faz este trabalho muito bem, abaixo tem uma imagem representando isso:

About

Full Cycle - Apache Kafka do Zero

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published