Apache Kafka: uma introdução

Tempo de leitura: 9 minutos
Desenvolvimento de Software
por em 3 de dezembro de 2020

Quem trabalha com desenvolvimento de software, provavelmente já ouviu falar no Kafka. Com a crescente necessidade de lidar com um alto número de informações, essa plataforma ganhou notoriedade por oferecer uma solução para fluxo de dados contínuo.

Pensando nisso, Leticia Lisboa apresentou um SoftDrops* sobre o tema, explorando alguns conceitos introdutórios para aqueles que desejam conhecer a plataforma. Para contextualizar o assunto, a desenvolvedora iniciou essa edição realizando uma breve explicação sobre como funciona a comunicação em serviços.

Comunicação Síncrona

Ao pensar em serviços hoje, para um se comunicar com outro, é enviado uma requisição que obtém uma resposta. Esse modelo é o mais simples e, de acordo com Leticia, pode ser visto em vendas de produtos.

Por exemplo, no cenário onde um usuário deseja obter as informações de um determinado produto, um serviço de venda de produtos envia uma requisição para o serviço de catálogo de produtos com a informação de que deseja determinado item. Uma consulta é realizada no catálogo de produtos, e este devolve uma resposta com as informações do item para o serviço de venda de produtos, conforme imagem abaixo:

apache_kafka1

Esse modelo, apesar de mais usual, pode apresentar problemas. Ao vender o produto, uma tela de checkout é apresentada ao usuário. Caso o pagamento seja feito no cartão de crédito, será necessário processar essa informação.

Nesse tipo de abordagem de comunicação, o serviço de venda de produtos envia uma requisição diretamente para o serviço de pagamentos e pode demorar para obter algum retorno. Sendo assim, nesse cenário, a tela do usuário ficaria travada, não permitindo que ele interagisse com outras partes do sistema. Caso isso ocorra em um grande volume de vendas, onde várias requisições são enviadas e ficam aguardando um retorno, a comunicação entre serviços ficaria mais lenta e o tempo de resposta seria ainda maior.

apache_kafka2

Comunicação assíncrona

Já na abordagem assíncrona, é possível ter um serviço de mensageria, segundo a desenvolvedora. Na prática, uma requisição é feita por um serviço, que delega essa solicitação para o serviço de mensageria. Por sua vez, esse irá retornar a mensagem que o processamento está sendo realizado.

A vantagem desse tipo de comunicação é a possibilidade de permitir que o usuário na ponta consiga interagir com outras partes da aplicação. Isso auxilia no processo de vendas, por exemplo, pois o cliente pode até mesmo receber um e-mail de que o pagamento será confirmado posteriormente, não travando o processo.

Nesse sentido, esse serviço também tem como característica a responsabilidade de delegar essas mensagens e requisições para o sistema de pagamento. Dessa forma, se o serviço de pagamento ficar mais lento – ou até mesmo cair – as mensagens não serão perdidas. O processamento irá acontecer quando ele voltar a funcionar, e será realizada a confirmação ou a recusa de pagamento.

Sendo assim o serviço de pagamento pode enviar uma mensagem ao serviço de mensageria informando que o retorno está pronto, e esse por sua vez comunica aos interessados o resultado. Por exemplo: um e-mail ao usuário informando o status da compra. Dentro desse cenário de comunicação assíncrona, o Kafka se encaixa nessa caixa de mensageria, conforme a imagem abaixo.

apache_kafka3

No exemplo do processamento de cartão de crédito, esta solicitação é enviada ao serviço de mensageria, o usuário pode receber imediatamente um status de processando, mas não deixa esta solicitação presa, permitindo que ele possa interagir com outras partes do sistema.

O que é o Kafka?

Após realizar essa contextualização, Leticia comentou que o Kafka é uma plataforma de streaming de eventos com capacidade para lidar com uma grande quantidade de dados por dia. Ele foi criado pelo LinkedIn, em 2011, para processar a alta demanda de tweets que eram recebidos, e que causava lentidão na operação. Sendo disponibilizado em código aberto, a empresa Confluent é a responsável por aprimorar e adicionar recursos ao Kafka para que eles possam ser facilmente acessados.

O Kafka iniciou como uma fila de mensagens e teve tanto sucesso que foi recebendo outras funcionalidades com o passar do tempo, o que o tornou um ecossistema. Essa evolução permitiu que o Kafka seja considerado uma plataforma completa de streaming de eventos (event streaming), que na prática é a captura de dados em tempo real.

Essa coleta, esclareceu a desenvolvedora, pode ser feita em uma aplicação, dispositivos móveis, sensores de IoT (Internet das Coisas), ou em qualquer outro recurso que o cliente fizer uma interação. Ao comercializar produtos, por exemplo, a ação pode ser a adição de um item no carrinho de compras, pelo cliente, que irá efetivar a compra posteriormente.

Os dados também podem ser compreendidos como fluxos de eventos, que por sua vez podem ser armazenados no Kafka e manipulados em tempo real ou posteriormente. Eles podem ser utilizados para diversas ações, como análise ou interpretação. Além disso, também podem ser transferidos para outros bancos de dados ou aplicações, conforme a necessidade do que está sendo desenvolvido. Abaixo, uma amostra de como o Kafka funciona dentro de um e-commerce:

apache_kafka4

Diferenciais e formas de aplicação

Utilizar o Kafka para mensageria em uma aplicação de venda online, como estamos exemplificando, é apenas uma das possibilidades da plataforma. Além dessa, de acordo com Leticia, ele também pode auxiliar em tarefas como:

– Processar pagamentos e transações financeira;

– Rastrear e monitorar carros, caminhões, frotas e remessas;

– Capturar e analisar dados de dispositivos IoT;

– Coletar e reagir imediatamente interações e pedidos de clientes;

– Monitorar pacientes em cuidados hospitalares;

– Conectar, armazenar e disponibilizar dados para diferentes departamentos de uma empresa;

– Servir como base para plataforma de dados, arquiteturas orientadas a eventos e microsserviços.

Um dos principais fatores que distingue o Kafka de outros serviços de mensageria é a tolerância a falhas e alta disponibilidade de dados que ele fornece. Isso se dá por meio da replicação das informações: Leticia informou que é possível configurar o Kafka para copiar esses dados para outros brokers, mantendo-os em outros locais. Uma das configurações comuns de produção para atingir esse objetivo é o fator de replicação de 3. Dessa forma, haverá três cópias desses materiais em outras partições.

Aprofundando o conhecimento

Ao final de sua apresentação, a desenvolvedora ainda comentou com os colegas sobre os próximos passos para quem deseja saber mais sobre o Kafka. De acordo com Leticia, em relação aos conceitos, é interessante saber mais sobre producer, consumer, topic, distributed partition, replication factor, message delivery e partition leadership. Além disso, é interessante saber mais sobre segurança, Kafka Connect e outros recursos disponíveis para utilizar dentro da plataforma.

*O SoftDrops é um evento de troca de conhecimento que acontece todas as quartas-feiras, na SoftDesign. A cada semana, um colaborador se predispõe a expor para os colegas algum tema de seu interesse, que tenha relação com os três pilares do nosso negócio: design, agilidade e tecnologia. A minipalestra dura em torno de trinta minutos e é seguida por um bate-papo entre os participantes.

Sugestões ou críticas para nosso blog? Entre em contato pelo endereço mkt@softdesign.com.br.