Conceitos básicos do Apache Kafka

1 out 2020 | Apache Kafka, Clusters, Kafka, Kafka Resources

Neste artigo, vamos entender alguns conceitos básicos sobre Kafka, já introduzido em o que é Apache Kafka.

Em resumo, o Kafka foi inicialmente desenvolvido no LinkedIn e posteriormente aberto, em 2011. Como resultado, seguiu evoluindo até se estabelecer como ferramenta padrão para construir pipelines de dados em tempo real.
De acordo com a documentação oficial, Kafka é semelhante a um sistema de mensagens corporativas. Portanto, em um típico sistema de mensagens, existem três componentes:
  1. Producer (Produtor)
  2. Broker (Intermediador)
  3. Consumer (Consumidor)
Em síntese, Producers são aplicações clientes e enviam as mensagens. Então, Brokers recebem estas mensagens e as armazenam. Por conseguinte, os Consumers leem estas mensagens.

Apache Kafka

Em princípio, o Kafka é um sistema de mensagens corporativas altamente escalonável e tolerante a falhas:
Ecossistema Apache Kafka imagem

O ecossistema Apache Kafka

Em primeiro lugar, o Producer envia mensagens para o Kafka Cluster. Em segundo lugar, o Cluster é um intermediador em execução em um grupo de computadores. Por fim, Clusters pegam registros de mensagens dos Producers e os armazenam no registro de mensagens do Kafka.
Mais abaixo na figura, estão as aplicações para o Consumer. Então, este lê e processa as mensagens do Cluster e pode enviá-las para Hadoop, Cassandra ou HBase. Ou enviá-las novamente ao Kafka, para que outra pessoa leia esses registros modificados ou transformados.
Sem dúvida, com rendimento e escalabilidade fantásticos, o Kafka permite que você lide facilmente com um fluxo contínuo de mensagens. Portanto, se puder conectar alguma estrutura de processamento de fluxo ao Kafka, este pode ser sua infraestrutura de backbone em tempo real. Além disso, também fornece APIs de processamento de fluxo.
Em seguida, está o Kafka Connector, pronto para importar ou exportar dados do Kafka. Não só são conectores prontos para uso, como também são estruturas para construir conectores especializados para qualquer aplicação.
Finalmente, por ser uma plataforma de streaming distribuída, você tanto pode usar como um sistema de mensagens corporativo, como também para simplificar pipelines de dados complexos com um grande número de Consumers e Producers. Além disso, pode também usá-lo como plataforma de processamento de fluxo. E não para por aí: também fornece conectores para exportar e importar dados em massa de bancos de dados e outros sistemas.

Os conceitos básicos do Kafka

No entanto, para implementar o Apache Kafka, você precisa entender alguns parâmetros de configuração. Por certo, precisa ajustar ou personalizar seu comportamento de acordo com os requisitos e casos de uso. A seguir, conheça alguns conceitos básicos do Kafka:
  1. Producer
  2. Broker
  3. Consumer
  4. Cluster
  5. Tópico
  6. Partição
  7. Deslocamento
  8. Grupos de Consumers

Kafka Producer

É uma aplicação que envia mensagens. Por analogia, podem ser desde uma string simples até um objeto complexo, como um dado pequeno ou médio. Seja como for, para o Kafka, é apenas uma simples matriz de bytes.
Se acaso você quiser enviar um arquivo ou todos os registros de uma tabela para o Kafka, deve criar uma aplicação Producer. Em seguida, disparar uma consulta no seu banco de dados, coletar o resultado e enviar cada linha como uma mensagem. Portanto, ao trabalhar com Kafka para enviar dados, você deve criar uma aplicação Producer.

Kafka Broker

É o servidor Kafka. Em outras palavras, o Kafka Broker atua como um intermediador de mensagens entre o Producer e o Consumer. Como não interagem diretamente, usam o Kafka Broker para intermediar essa troca de mensagens.

Kafka Consumer

É uma aplicação que recebe dados. Por isso, Consumers são os destinatários. Mas, lembre-se: Producers só enviam dados ao servidor. E qualquer interessado nesses dados pode ser um Consumer, que pode enviá-los por qualquer Producer, desde que tenha permissão para lê-os.
Enfim, se você quiser ler o arquivo enviado por um Producer, deve criar uma aplicação de Consumer e solicitar os dados. Então, o Kafka Broker enviará algumas mensagens. Assim, a aplicação cliente receberá algumas linhas, irá processá-las e novamente solicitará mais mensagens. Ou seja, esse processo de solicitação e fornecimento de mensagens continuará enquanto novas mensagens chegarem do Producer.

Kafka Cluster

Se acaso você tem experiência em sistemas distribuídos, já sabe que um cluster é um grupo de computadores que atuam juntos para um propósito comum. Já que o Kafka é um sistema distribuído, o Cluster tem o mesmo significado para o recurso. Em suma, é um grupo de computadores executando uma instância do Kafka Broker.

Tópico Kafka

Ao passo que o Producer envia dados ao Kafka Broker, o Consumer pode solicitar esses dados. Contudo, é necessário haver algum mecanismo de identificação para solicitar os dados de um Broker. Então, vem a noção de tópico, que é um conjunto de fluxo dados.
Por exemplo, você cria um tópico chamado Pedidos Globais e todo ponto de venda pode ter um Producer. Logo depois, este envia os detalhes do pedido como uma mensagem ao tópico chamado Pedidos globais. Ao mesmo tempo, um assinante interessado nesse tópico pode se inscrever também.

Partição Kafka

De fato, o Broker armazena dados para um tópico, mas que podem ser enormes. Maiores até que a capacidade de armazenamento de um computador. Portanto, nesse caso, uma das soluções mais importantes é dividir esses dados em duas ou mais partes e distribuí-lo para vários computadores.
Ou seja, como o Kafka é um sistema distribuído e executado em um grupo de máquinas, é evidente que possa dividir um tópico em partições e armazenar em um computador. Por isso, o Kafka pode criar dez ou cem partições, que devem ser suficientes.
No entanto, quem toma essa decisão é você. Ao criar um tópico, você decide que o Kafka Broker criará essa quantidade de partições. Mas, lembre-se: cada partição fica em uma única máquina. Por consequência, você não pode refazê-las. Então, é importante fazer algumas estimativas e cálculos para definir o número dessas partições.

Deslocamento Kafka

É um número de sequência de uma mensagem em uma partição, que é atribuído conforme as mensagens chegam e se tornam imutáveis.
Assim sendo, o Kafka armazena as mensagens na ordem de chegada em uma partição. Dessa forma, a primeira mensagem obtém o deslocamento “0”. Em seguida, a próxima recebe o deslocamento “1” e segue aumentando para as seguintes. No entanto, não há deslocamento global entre as partições, o que a torna local para a partição. Portanto, se você deseja localizar uma mensagem, deve saber três coisas: o nome do tópico, o número da partição e o do deslocamento. Assim, poderá localizar diretamente uma mensagem.

Grupo de Kafka Consumers

Muitos Consumers formam grupos para compartilhar o trabalho. Por exemplo, é como se você tivesse uma grande tarefa e quer dividi-la entre várias pessoas. Então, cria um grupo e compartilha o trabalho entre seus membros.
Ou, como em uma rede de varejo, em que cada loja tem seus faturamentos. Só que você deseja trazer todas as faturas de cada uma para o seu data center. Sem dúvida, como o Kafka é uma excelente solução para transportar dados como esses, você decide implementá-lo.
Antes de tudo, você cria um Producer para cada faturamento. Então, esse envia as contas como uma mensagem para um tópico Kafka. Por fim, o próximo passo é criar um Consumer, que lerá os dados do tópico e os gravará em seu data center.
Mas há centenas de Producers enviando rapidamente muitos dados para um único tópico. Portanto, você decide criar um grande Kafka Cluster, particionar seu tópico e distribuir pelo cluster. Agora, vários Brokers estão compartilhando a carga de trabalho para receber e armazenar dados. Dessa maneira, você tem muitos Producers e vários Brokers para compartilhar a carga de trabalho.
Em conclusão, o particionamento e o grupo de Consumers são uma ferramenta para escalabilidade. Já que o número máximo de Consumers em um grupo é igual ao total de partições que há em um tópico. Enquanto isso, o Kafka Broker não permite que mais de um Consumer leia a mesma partição simultaneamente. Por fim, essa restrição é necessária para evitar a duplicidade na leitura dos registros.

Extra: caso de uso do Apache Kafka

Em princípio, um sistema de mensagens típico parece muito simples. Agora, vamos examinar o problema de integração de dados em uma grande organização:
Solução típica de Integração de Dados imagem

Caso de uso: solução típica de Integração de Dados

Conforme a figura mostra, este é o requisito de integração de dados em uma grande empresa. Ao mesmo tempo, existem muitos sistemas de origem e vários de destino. Então, você recebe a tarefa de criar pipelines de dados para movê-los entre esses sistemas. Por outro lado, a empresa que está crescendo e o número desses sistemas fica cada vez maior. Por fim, seu pipeline de dados vira uma bagunça. E alguma parte dele continuará interrompendo todos os dias.
No entanto, ao usar um sistema de mensagens para resolver esse tipo de problema de integração, a solução pode ser mais simples e limpa, como mostrado abaixo:
Integração com um Sistema de Mensagens imagem

Caso de uso: integração com um sistema de mensagens

Desse modo, essa é a ideia descoberta pela equipe do LinkedIn, que começou a avaliar os sistemas de mensagens existentes. Mas nenhum deles atendeu aos critérios para oferecer suporte ao rendimento e a escala desejados. Assim, surgiu o Kafka.

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Share This