Tudo é movido a eventos. São microserviços sendo chamados de acordo com seus eventos, cada microserviço é um evento que ocorre.
Qunado um alarme dispara, quando você finaliza uma compra em e-commerce, e entre outros... Todos são eventos.
Com o Apache Kafka podemos gerenciar nossos eventos e principalmente nossos microserviços. Evitar que tudo seja feita em somente uma chamada, mas podendo separar para que um problema não afete todo o fluxo completo.
É um conjunto de dados armazenados que servem como Banco de Dados, sendo que cada Topic possui um local de armazenamento e diversas partições.
Cada Topic de dados é armazenado de forma dividida, ou seja, particionada, dessa forma, pensando de modo resumido, temos uma segurança a mais de que caso uma das partições se comprometa, ainda tenhamos as outras e assim não prejudique a aplicação e os dados ao todo.
<aside> 💡 Se temos uma gaveta com papeis importantes e dividimos esses papeis em varias gavetas, se uma delas for roubada, ainda teremos os papeis das outras.
</aside>
Cada partição é definida por um indice, denominado de Offset, e devemos obrigatóriamente definir a quantidade de partições ao criar um Topic.
Ao fazer requisições, estaremos criando a cada uma um novo Offset, e assim "documentar" a posição de cada Topic.
Pensando nos Topic, podemos imaginar que ele é usado para garantir a NÃO perda dos dados.
Imagine um cenário de compras, onde ao finalizar a compra o Backend cai. E agora? Ao invés de enviarmos os dados da compra direto para o Backend, enviamos ao Kafka e assim ele guardará esses dados da compra empilhados nos Topic e suas Partições para quando o serviço de Backend voltar ele mesmo (Kafka) enviar os dados ao Backend, garatindo assim que aquela transação NÃO seja perdida.
Quem grava os dados nos Topic, quem armazena, são os Producers, enquanto quem consome os dados de um Topic são os Consumers. Vale ressaltar que um Topic pode ter mais de um Consumer consumindo seus dados armazenados.