Você está na página 1de 18

Início  Back-end

3 anos atrás

Como fazer a integração de


dados com Apache Kafka

É para fazer a transferência dos dados entre as aplicações que usamos um


sistema de mensagens como o Apache Kafka.

Podemos justificar essa necessidade já que o mundo tem gerado um volume cada vez
maior de informações. Um cenário comum é que estes dados, uma vez gerados,
precisam ser transportados para diversas aplicações.

Por exemplo, quando fazemos uma compra com cartão de crédito a operadora precisa
avisar várias aplicações diferentes para contabilizar a compra, os benefícios e até a
análise contra fraudes.

Neste caso, é desejável que cada aplicação seja responsável pela implementação das
regras do negócio. E apenas isso. Uma aplicação não deveria se preocupar com a
entrega
Utilizamos ou captura
cookies dossemelhantes
e tecnologias dados. para melhorar sua navegação. Ao continuar navegando
OK
você concorda com a nossa Política de Privacidade.
Este é um problema complexo envolvendo data streaming.

“ 10 skills de um desenvolvedor back-end de alto nível

Conteúdo [ ocultar ]
1 O que é Data streaming
2 Sistema de Mensagem
3 O que é Apache Kafka
4 Características do Apache Kafka
5 Ferramentas similares ao Apache Kafka
6 Arquitetura do Apache Kafka
6.1 Acesso sequencial no disco
7 Caso de Uso do Apache Kafka
7.1 TOPICO_NOVA_VENDA
 7.2 TOPICO_NOVO_USUARIO
 7.3 TOPICO_RECLAMACAO
 7.4 TOPICO_DEVOLUCAO
7.5 TOPICO_NOTIFICA_USUARIO

8 Ferramentas complementares

9 Apache Kafka e microservices
10 Conclusão sobre o Apache Kafka

O que é Data streaming


Um fluxo de dados constante e sem controle é chamada de data streaming.

Sua principal característica é que os dados não tem limites definidos, assim, não é
possível dizer quando começa ou acaba o fluxo (stream).

Os dados são processados à medida em que chegam no destino. Alguns autores


chamam de processamento em tempo real, ou on-line.

Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.
Uma abordagem diferente é o processamento em bloco, batch, ou off-line, na qual
blocos de dados são processados em janelas de tempo de horas ou dias.

Muitas vezes o batch é um processo que roda a noite, consolidando os dados daquele
dia. Há casos de janelas de tempo de uma semana ou mesmo de um mês, gerando
relatórios desatualizados.

Sistema de Mensagem
O sistema de mensagens permite desacoplar a geração dos dados do seu
processamento de forma assíncrona, assim, uma aplicação pode continuar funcionando
sem esperar a outra terminar seu processamento.

Outra vantagem é que essa técnica tem o potencial de diminuir a necessidade de leitura,
por exemplo, no banco de dados.

Sistemas de mensagem podem ser usados em qualquer área. Viagem, finanças, logística,

mapas, transporte público e varejo.

 Neste artigo veremos o que é o Apache Kafka e como podemos nos beneficiar com um
sistema de mensagens para criar soluções de streaming.

“ 10 livros de Python que todo dev especialista deve ler

O que é Apache Kafka


O Apache Kafka é um sistema de mensagens usado para criar aplicações de streaming,
ou seja, aquelas com fluxo de dados contínuo.

Criado originalmente pelo LinkedIn, o Kafka é baseado em logs, algumas vez chamado de
write-ahead logs, commit logs ou até mesmo transaction logs.

Um log é uma forma básica de armazenamento, porque cada nova informação é


adicionada no final do arquivo. Este é o princípio de funcionamento do Kafka. Este
assunto está muito bem detalhado no artigo do próprio criador.
Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.
O Kafka é adequado para soluções com grande volume de dados (big data) porque uma
das suas características é a alta taxa de transferência.

O Apache Kafka tem 3 funcionalidades:

Sistema de mensagem do tipo publish/subscribe;


Sistema de armazenamento: as mensagens ficam armazenadas por um período de
tempo pré-definido. Por padrão, as mensagens duram 7 dias, mas podem até
mesmo ficar indefinidamente;
Processamento de stream: é possível transformar a mensagem imediatamente
após o seu recebimento.

Nas próximas seções veremos a arquitetura do Kafka, seus principais componentes e os


casos de uso mais comuns.

Basicamente, o Kafka é um intermediário que coleta os dados da fonte e entrega para



uma aplicação que consumirá esses dados, como visto na imagem:

Figura 1: Visão geral da arquitetura

Um uso mais recente do Kafka é o processo de ETL (Extract, Transform and Load), que
copia os registros de um banco de dados para outro, geralmente de uma base
transacional (OLTP) para uma base analítica (OLAP).
Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.
Alguns autores acreditam que o futuro do ETL passa pelo Kafka, porque as ferramentas
de ETL tendem a ser complexas, e o Kafka pode ajudar a diminuir a dificuldade.

Com o Apache Kafka é possível até mesmo transformar um processamento batch em


tempo real, como será mostrado no fim deste texto.

O ponto central do sistema de mensagem é, naturalmente, a mensagem, que pode ser


chamada também de registro ou evento, e é composta por:

Nome do tópico: fila na qual a mensagem será gravada. Pode ser comparado a
uma tabela do banco de dados;
Partição: subdivisão do tópico, a partição é um recurso para ajudar a balancear a
carga;
Timestamp: os registros são ordenados pela hora de gravação;
Chave: opcional, pode ser usada em cenários avançados;
 Valor: a informação que se pretende transferir. O ideal é que os dados usem um
 formato conhecido, como JSON ou XML.


Características do Apache Kafka

Os sistemas de mensagem podem ser de dois tipos: point-to-point e publish-subscribe.

O Apache Kafka é do segundo tipo, no qual uma aplicação que publica (publish) e uma
aplicação que se inscreve (subscribe) para receber as mensagens.

O tempo entre publicar e receber a mensagem pode ser de milissegundos, assim, uma
solução Kafka tem baixa latência.

A arquitetura do Apache Kafka, vista com mais detalhe na seção a seguir, combina
diversas outras características, como:

Escalabilidade: o cluster pode ser facilmente redimensionado para atender ao


aumento ou diminuição das cargas de trabalho;
Distribuído: o cluster Kafka opera com vários nós, dividindo o processamento;
Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.
Replicado, particionado e ordenado: as mensagens são replicadas em partições
nos nós do cluster na ordem em que chegam para garantir segurança e velocidade
de entrega;
Alta disponibilidade: o cluster tem diversos nós (brokers) e várias cópias dos
dados, assim, .

Ferramentas similares ao Apache Kafka


Há outras ferramentas similares ao Kafka, são exemplos:

ActiveMQ;
RabbitMQ.

Eles têm diferenças e semelhanças e cada um tem sido usado em cenários distintos,
com suas vantagens e desvantagens.

 Arquitetura do Apache Kafka


 O Apache Kafka tem sido usado por empresas como Netflix, Spotify, Uber, LinkedIn e
 Twitter. E sua arquitetura é composta por producers, consumers e o próprio cluster.

O producer é qualquer aplicação que publica mensagens no cluster. O consumer é


qualquer aplicação que recebe as mensagens do Kafka. O cluster Kafka é um conjunto
de nós que funcionam como uma instância única do serviço de mensagem.

Um cluster Kafka é composto por vários brokers. Um broker é um servidor Kafka que
recebe mensagens dos producers e as grava no disco. Cada broker gerencia uma lista de
tópicos e cada tópico é dividido em diversas partições.

Depois de receber as mensagens, o broker as envia para os consumidores que estão


registrados para cada tópico. Veja a imagem:

Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.
Figura 2: Visão geral dos produtores, broker e consumidores.

As configurações do Apache Kafka são gerenciadas pelo Apache Zookeeper, que


armazena os metadados do cluster, como localização das partições, lista de nomes, lista
de tópicos e nós disponíveis. Assim, o Zookeeper mantém a sincronização entre os
diversos elementos do cluster.

Isso é importante porque o Kafka é um sistema distribuído, ou seja, as gravações e


leituras são feitas por diversos clientes simultaneamente. Quando há uma falha, o
 Zookeeper elege um substituto e recupera a operação.

 Acesso sequencial no disco



Uma curiosidade é que o Apache Kafka persiste a mensagem no disco e não na
 memória, como se imagina ser mais rápido.

De fato, o acesso à memória é mais rápido na maioria das situações, principalmente


quando consideramos acesso a dados que estão em posições aleatórias na memória.

Contudo, o Kafka faz acesso sequencial e, neste caso, o disco é mais eficiente. Há
outras ferramenta de big data que trabalham da mesma forma, como por exemplo o
HDFS.

No acesso sequencial o disco sabe onde começa e termina o bloco de dados, enquanto
que no acesso aleatório o disco precisa procurar e se mover para a posição dos blocos
de dados.

É como se os dados estivessem ordenados. Pensando assim, o Kafka lê os dados


como se fosse um livro, da primeira para a última página.
Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.
Quando temos leitura/gravação aleatória seria como ler o mesmo livro, mas com as
páginas misturadas. Antes de ler, você teria de procurar a próxima página.

Exemplo de como funciona o acesso


Apache Kafka producer

Producer
Um producer envia mensagens simultaneamente para vários tópicos. Da mesma forma,
um consumer lê mensagens de vários tópicos simultaneamente.

Isso garante a baixa latência citada anteriormente, porque tudo acontece ao mesmo
tempo. Aqui, o Zookeeper é o responsável por indicar os brokers para cada
producer/consumer.

Consumer

Um consumer se registra para receber as mensagens de pelo menos um tópico. A partir


daí, as novas mensagens daquele tópico são recebidas automaticamente pelo consumer.
Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.
Para aumentar a velocidade de leitura das mensagens, é possível registrar um conjunto
de consumers, aumentando o paralelismo.

O consumer mantém o controle da última mensagem lida por meio de uma propriedade
chamada offset. Assim, é possível reprocessar um fluxo de dados, se ele ainda estiver
disponível. Esse controle é flexível, mas ao mesmo tempo traz um certo nível de
complexidade. 

A configuração padrão do Apache Kafka tem ótima performance, mesmo com hardware
limitado.

Ainda assim é necessário otimizar o cluster quando temos grandes cargas de dados.
Para escalar usamos várias estratégias, geralmente testando as combinações de
configuração, por exemplo, alterando o número de produtores, consumidores e tópicos.

 Caso de Uso do Apache Kafka


apache kafka apps
Possibilidades com
Apache Kafka

O caso de uso selecionado para mostrar o funcionamento de uma solução Kafka será a
integração entre um sistema de vendas, o log de navegação do usuário no site, o data
lake, o analytics, o BI (Business Intelligence) e a ferramenta de visualização de dados.

A ideia é explorar várias possibilidades, mesmo que nem todas sejam usadas na sua
realidade. Entre cada um dos sistemas está o cluster do Apache Kafka, que funciona
como o integrador dos dados em tempo real.

Vamos criar diversos tópicos para alimentar cada uma das fontes de dados da solução,
registrando desde a navegação no site até a conclusão da venda. Os tópicos do Kafka
Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
para atender a esta demanda são:
você concorda com a nossa Política de Privacidade.
TOPICO_NAVEGACAO_USUARIO: o servidor web notifica cada nova navegação do
usuário;
TOPICO_NOVA_VENDA: o e-commerce notifica cada nova venda;
TOPICO_NOVO_USUARIO: o e-commerce notifica cada novo usuário;
TOPICO_RECLAMACAO: o e-commerce notifica cada nova reclamação;
TOPICO_DEVOLUCAO: o e-commerce notifica cada nova devolução de produto;
TOPICO_NOTIFICA_USUARIO: o analytics notifica o usuário;

Os logs de navegação no site serão enviados para TOPICO_NAVEGACAO_USUARIO e


serão posteriormente usados no analytics para entender o comportamento dos
usuários, por exemplo, o que eles estão procurando.

O analytics pode ser o Apache Spark ou famoso Apache Hadoop.

Estes logs são armazenados em um sistema de arquivos, como o Amazon S3 ou o HDFS.



Os registros serão posteriormente processados com ferramentas de análise de dados
 ou machine learning. Existem muitas ferramentas para captura de log com conectores

 Kafka, como o Apache Flume.

 TOPICO_NOVA_VENDA
O TOPICO_NOVA_VENDA receberá uma mensagem cada vez que uma vez for realizada.
Com o suporte do Kafka Streams esta mensagem será transformada em um registro de
banco de dados para ser gravado no BI. Isso garante atualização em tempo real do BI.

Além do BI, pode-se gravar os registros consolidados de vendas na a ferramenta de


visualização de dados utiliza uma versão consolidada deste conjunto de dados, como o
Tableau ou Qlik. Para coletar os dados diretamente do banco podemos usar um CDC
(visto na próxima seção), ou alterar a aplicação para enviar a mensagem quando gravar a
venda.

TOPICO_NOVO_USUARIO
O TOPICO_NOVO_USUARIO receberá uma mensagem para cada novo usuário
Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
cadastrado. Essa informação será usada futuramente pelo analytics, por exemplo, para
você concorda com a nossa Política de Privacidade.
receber ofertas personalizadas a partir do seu histórico de navegação.

TOPICO_RECLAMACAO
O TOPICO_RECLAMACAO receberá uma mensagem para cada nova reclamação. Essa
informação será usada também pelo analytics, para minimizar o customer churn, que é o
percentual de clientes que param de usar seus produtos. É sempre bom saber o motivo
de insatisfação dos clientes.

TOPICO_DEVOLUCAO
O TOPICO_DEVOLUCAO receberá uma mensagem para cada devolução de produto, uma
informação importante para avaliar a qualidade dos produtos e a satisfação do cliente.


TOPICO_NOTIFICA_USUARIO

 O TOPICO_NOTIFICA_USUARIO receberá uma mensagem para cada notificação a ser


enviada para os clientes. Essa notificação é criada pelo analytics, no módulo de machine

learning que identifica as ofertas mais adequadas àquele perfil.

 Opcionalmente, todos os tópicos podem gravar os dados no S3, criando assim um data
lake. Esta é uma solução mais complexa que envolve sistemas de big data e machine
learning. Algumas empresas optam por essa abordagem de gravar os dados originais
para análise futura.

Ferramentas complementares
O Apache Kafka é responsável pela transferência dos dados entre aplicações, mas não é
suficiente para construir uma solução completa. Por isso, são necessárias outras
ferramentas para as tarefas que o Kafka não faz, como o CDC.

O CDC (Change Data Capture), como o nome sugere, é uma categoria de software que
captura as mudanças em um banco de dados e pode ser usado em conjunto com o
Kafka para entrega de dados em tempo real, como uma alternativa ao batch.
Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.
O CDC monitora as alterações no banco, que são entregues ao Kafka continuamente, o
que minimiza o impacto na rede e na performance do banco. Outras ferramentas que
valem menção:

Kafka Streams: biblioteca do Kafka que pode ser usada no lugar da API de
producer/consumer para processamento das mensagens em tempo real;
KSQL: mecanismo de SQL para o Kafka. Permite fazer consultas no stream de
dados;
Kafka Connect: componente do Kafka para conexão com sistemas externos como
bancos de dados (SQL ou NoSQL) ou sistema de arquivo;
Spark Streaming: extensão do Apache Spark para processamento de streaming;
Apache Flume: serviço de coleta e agregação de dados;
Spring for Apache Kafka: permite o desenvolvimento de aplicações Kafka com as
facilidades do Spring;
 Debezium: plataforma de CDC escalável, moderna e distribuída com suporte a
 diversos bancos de dados.


Apache Kafka e microservices

Os microservices tem usado cada vez mais o Apache Kafka. Tradicionalmente, a
comunicação entre microservices é feita pela própria API REST.

Entretanto, à medida em que a quantidade de microservices aumenta, aumenta a


complexidade para integração. Novamente, um bom cenário para o Kafka pelo motivos
já vistos acima:

Desacoplamento entre o produtor e o consumidor da mensagem: isso


aumenta até a velocidade de desenvolvimento;
Alta disponibilidade: mesmo quando um microservice fica indisponível, o sistema
continua funcionando;
Baixa latência: a transferência é imediata.

O projeto de novas arquiteturas costuma levar em consideração o uso de sistemas de


Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
mensagens, especialmente com o envio de mensagens assíncronas, centralizando a
você concorda com a nossa Política de Privacidade.
integração de dados no Apache Kafka.

Um sistema de mensagem é recomendado inclusive quando temos a migração de uma


aplicação legada (monólito) para microservices.

Conclusão sobre o Apache Kafka


O Apache Kafka é uma plataforma de streaming distribuída, que pode ser usada como
um sistema de mensagem no estilo publish/subscribe.

Tem sido usado principalmente para integração de sistemas em tempo real e, em função
de sua flexibilidade, pode ser usado para outras tarefas como ETL.

Os dados são enviados na forma de mensagens da aplicação de origem para a aplicação


de destino.

O Apache Kafka centraliza o recebimento e a entrega das mensagens ao consumidor
 final, garantindo uma alta taxa de transferência e confiabilidade. Por isso tem sido usado

 para integração de sistemas com grande volume de dados.


Existem diversas ferramentas integradas ao Kafka com funcionalidades complementares,

como o Kafka Streams, Spark, Flume e Debezium. Com estas ferramentas é possível criar
sistemas em tempo real, ou até mesmo transformar processamento batch em tempo
real.

Com todas estas vantagens, o Apache Kafka desponta como uma ferramenta importante
nesta nova era da análise de dados para ajudar a resolver o problema da complexidade
da transferência de dados entre aplicações.

“ Encontre vagas para desenvolvedor back-end com


seu perfil

Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.
Marco Reis
Engenheiro de software com experiência em Java, Big Data, Cloud, Microservices,

NLP e Information Retrieval. Mestre em Computação Aplicada pela Universidade

de Brasília com artigos publicados em congressos nacionais e internacionais.

Professor e palestrante de tecnologia.

Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.

Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.
Categorias
Carreira de programador
Back-end
Full stack
Front-end
Big Data
Mobile
DevOps
Gestão de TI
Scrum Master


Leituras

Recomendadas

BACK-END FRONT-END FULL STACK

Design Patterns: seu código com mais qualidade e


elegância
Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.
BACK-END

O que são microsserviços e como funcionam?

BACK-END

Como funciona blockchain?

Quer receber conteúdos


incríveis como esses?
Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.
Assine nossa newsletter para ficar por dentro de todas as novidades do
universo de TI e carreiras tech.
Nome *

Email *

Inscreva-se

Utilizamos cookies e tecnologias semelhantes para melhorar sua navegação. Ao continuar navegando
você concorda com a nossa Política de Privacidade.

Você também pode gostar