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.
- 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)
É 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)
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.
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.
- 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.
- 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: