Nesta lição, veremos o que é Apache Kafka e como ele funciona junto com seus alguns casos de uso mais comuns. O Apache Kafka foi originalmente desenvolvido no LinkedIn em 2010 e mudou para se tornar um projeto Apache de nível superior em 2012. Possui três componentes principais:
- Editor-Assinante: Este componente é responsável por gerenciar e fornecer dados de maneira eficiente entre os nós Kafka e aplicativos de consumidor que escalam muito (literalmente).
- API Connect: A API Connect é o recurso mais útil para o Kafka e permite a integração do Kafka com muitas fontes de dados externas e coletores de dados.
- Streams Kafka: Usando Kafka Streams, podemos considerar o processamento de dados recebidos em escala quase em tempo real.
Vamos estudar muito mais os conceitos de Kafka nas próximas seções. Vamos em frente.
Conceitos Apache Kafka
Antes de nos aprofundarmos, precisamos ser minuciosos sobre alguns conceitos do Apache Kafka. Aqui estão os termos que devemos saber, muito brevemente:
-
- Produtor: Este é um aplicativo que envia mensagem para Kafka
- Consumidor: Este é um aplicativo que consome dados de Kafka
- Mensagem: Dados que são enviados pelo aplicativo do Produtor para o aplicativo do Consumidor por meio do Kafka
- Conexão: Kafka estabelece conexão TCP entre o cluster Kafka e os aplicativos
- Tópico: Um Tópico é uma categoria para a qual os dados enviados são marcados e entregues aos aplicativos de consumidor interessados
- Partição de tópico: Como um único tópico pode obter muitos dados de uma só vez, para manter o Kafka horizontalmente escalável, cada tópico é dividido em partições e cada partição pode residir em qualquer máquina de nó de um cluster. Vamos tentar apresentá-lo:
Partições de tópico
- Réplicas: Como estudamos acima, que um tópico é dividido em partições, cada registro de mensagem é replicado em vários nós do cluster para manter a ordem e os dados de cada registro no caso de um dos nós morrer.
- Grupos de Consumidores: Vários consumidores interessados no mesmo tópico podem ser mantidos em um grupo denominado Grupo de Consumidores
- Desvio: Kafka é escalonável, pois são os consumidores que realmente armazenam qual mensagem foi buscada por eles por último como um valor de 'deslocamento'. Isso significa que, para o mesmo tópico, o deslocamento do Consumidor A pode ter um valor de 5, o que significa que ele precisa processar o sexto pacote a seguir e para o Consumidor B, o valor do deslocamento pode ser 7, o que significa que ele precisa processar o oitavo pacote a seguir. Isso removeu completamente a dependência do próprio tópico para armazenar esses metadados relacionados a cada consumidor.
- Nó: Um nó é uma máquina servidor única no cluster Apache Kafka.
- Grupo: Um cluster é um grupo de nós i.e., um grupo de servidores.
O conceito de Tópico, Partições de Tópico e deslocamento também pode ser esclarecido com uma figura ilustrativa:
Divisão de tópico e compensação do consumidor no Apache Kafka
Apache Kafka como sistema de mensagens de assinatura e publicação
Com o Kafka, os aplicativos do Produtor publicam mensagens que chegam em um Nó Kafka e não diretamente para um Consumidor. A partir deste Nó Kafka, as mensagens são consumidas pelos aplicativos do Consumidor.
Produtor e consumidor Kafka
Como um único tópico pode obter muitos dados de uma só vez, para manter o Kafka horizontalmente escalonável, cada tópico é dividido em partições e cada partição pode residir em qualquer máquina de nó de um cluster.
Novamente, o Kafka Broker não mantém registros de qual consumidor consumiu quantos pacotes de dados. É o responsabilidade dos consumidores de manter o controle dos dados consumidos. Devido ao motivo de o Kafka não rastrear as confirmações e mensagens de cada aplicativo do consumidor, ele pode gerenciar muito mais consumidores com impacto insignificante no rendimento. Na produção, muitos aplicativos seguem até mesmo um padrão de consumidores em lote, o que significa que um consumidor consome todas as mensagens em uma fila em um intervalo regular de tempo.
Instalação
Para começar a usar o Apache Kafka, ele deve estar instalado na máquina. Para fazer isso, leia Instalar Apache Kafka no Ubuntu.
Caso de uso: rastreamento de uso do site
Kafka é uma excelente ferramenta para ser usada quando precisamos rastrear atividades em um site. Os dados de rastreamento incluem, sem limitação, visualizações de página, pesquisas, uploads ou outras ações que os usuários possam realizar. Quando um usuário está em um site, ele pode realizar uma série de ações ao navegar pelo site.
Por exemplo, quando um novo usuário se registra em um site, a atividade pode ser rastreada em que ordem um novo usuário explora os recursos de um site, se o usuário definir seu perfil conforme necessário ou preferir ir diretamente para os recursos do local na rede Internet. Sempre que o usuário clica em um botão, os metadados desse botão são coletados em um pacote de dados e enviados ao cluster Kafka, de onde o serviço de análise do aplicativo pode coletar esses dados e produzir insights úteis sobre os dados relacionados. Se olharmos para dividir as tarefas em etapas, aqui está como o processo será semelhante:
- Um usuário se registra em um site e entra no painel. O usuário tenta acessar um recurso imediatamente, interagindo com um botão.
- O aplicativo da web constrói uma mensagem com esses metadados para uma partição de tópico do tópico “clique”.
- A mensagem é anexada ao log de confirmação e o deslocamento é incrementado
- O consumidor agora pode puxar a mensagem do Kafka Broker e mostrar o uso do site em tempo real e mostrar dados anteriores se ele redefinir seu deslocamento para um possível valor anterior
Caso de uso: fila de mensagens
Apache Kafka é uma excelente ferramenta que pode atuar como um substituto para ferramentas de corretor de mensagens como RabbitMQ. A mensagem assíncrona ajuda a separar os aplicativos e cria um sistema altamente escalonável.
Assim como o conceito de microsserviços, em vez de construir um grande aplicativo, podemos dividir o aplicativo em várias partes e cada parte tem uma responsabilidade muito específica. Desta forma, as diferentes partes também podem ser escritas em linguagens de programação completamente independentes! O Kafka tem um sistema integrado de particionamento, replicação e tolerância a falhas que o torna bom como um sistema corretor de mensagens em grande escala.
Recentemente, o Kafka também é visto como uma solução de coleta de log muito boa, que pode gerenciar o broker do servidor de coleta de arquivo de log e fornecer esses arquivos para um sistema central. Com o Kafka, é possível gerar qualquer evento que você queira que qualquer outra parte de sua aplicação saiba.
Usando Kafka no LinkedIn
É interessante notar que o Apache Kafka foi visto e usado anteriormente como uma maneira através da qual os pipelines de dados poderiam se tornar consistentes e através dos quais os dados eram ingeridos no Hadoop. Kafka funcionou de forma excelente quando várias fontes de dados e destinos estavam presentes e não foi possível fornecer um processo de pipeline separado para cada combinação de origem e destino. O arquiteto Kafka do LinkedIn, Jay Kreps descreve bem esse problema familiar em uma postagem de blog:
Meu próprio envolvimento nisso começou por volta de 2008, depois de enviarmos nossa loja de valor-chave. Meu próximo projeto foi tentar colocar em funcionamento uma configuração do Hadoop e mover alguns de nossos processos de recomendação para lá. Tendo pouca experiência nesta área, naturalmente reservamos algumas semanas para a entrada e saída de dados, e o resto do nosso tempo para a implementação de algoritmos de previsão sofisticados. Então começou um longo trabalho árduo.
Apache Kafka e Flume
Se você tentar comparar esses dois com base em suas funções, encontrará muitos recursos comuns. Aqui estão alguns deles:
- É recomendado usar o Kafka quando você tiver vários aplicativos consumindo os dados em vez do Flume, que é feito especialmente para ser integrado ao Hadoop e só pode ser usado para ingerir dados no HDFS e HBase. Flume é otimizado para operações HDFS.
- Com o Kafka, é uma desvantagem ter que codificar os aplicativos de produtores e consumidores, enquanto no Flume, ele tem muitas fontes e coletores integrados. Isso significa que se as necessidades existentes corresponderem aos recursos do Flume, é recomendável usar o próprio Flume para economizar tempo.
- Flume pode consumir dados em vôo com a ajuda de interceptores. Pode ser importante para mascarar e filtrar dados, enquanto Kafka precisa de um sistema de processamento de fluxo externo.
- É possível para Kafka usar Flume como consumidor quando precisamos ingerir dados para HDFS e HBase. Isso significa que Kafka e Flume se integram muito bem.
- Kakfa e Flume podem garantir perda zero de dados com a configuração correta, o que também é fácil de conseguir. Ainda assim, para apontar, o Flume não replica eventos, o que significa que se um dos nós do Flume falhar, perderemos o acesso ao evento até que o disco seja recuperado
Conclusão
Nesta lição, vimos muitos conceitos sobre o Apache Kafka. Leia mais postagens baseadas em Kafka aqui.