image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Article image
Alex Silva
Alex Silva08/07/2022 12:50
Compartilhe

Introdução à Mensageria na Nuvem com Kafka e Python

  • #Kafka

Pontos Principais

  • Arquitetura do Apache Kafka
  • Como o Apache Kafka utiliza o Apache ZooKeeper
  • Consistência e disponibilidade do Apache Kafka
  • Evitando falhas e perda de dados no Apache Kafka
  • Principais benefícios do Apache Kafka

Este artigo, é um relato de experiências e ajustes na utilização de clusters Apache Kafka em um dos maiores varejistas do Brasil e de quais técnicas e processos que utilizamos ao lidar com clusters de Apache Kafka processando uma volumetria que passa de 5 milhões de mensagens por dia nos cenários de stream (eventos, processamento e consolidação) que são transacionais e 100 milhões de mensagens que são replicadas diariamente através de CDC do DB2 para o Apache Kafka para a disponibilização de dados para a baixa plataforma.

Segundo o Apache Kafka Report 2018, apresentado pela Confluent. O Apache Kafka é uma solução largamente utilizada tanto em empresas de pequeno porte como em empresas de muito grande porte.

  • Como podemos ter 100% de certeza que os nossos dados estarão no cluster Kafka?
  • Há a possibilidade de perder mensagens no Apache Kafka?
  • Como podemos verificar se as mensagens persistidas no Apache Kafka realmente estão disponíveis para consumo?

Essas são algumas das perguntas que buscaremos responder neste artigo.

Introdução

Durante as rotinas do dia a dia somado às várias particularidades que são enfrentadas por times de desenvolvimento em nosso ambiente, no qual precisamos integrar, extrair e processar dados de sistemas Mainframes IBM, .Net e Java, o passar dos anos e as características empíricas do dia a dia nos fizeram entender e aprender que é necessário não apenas saber escrever e consumir um tópico no Apache Kafka mas também entender as particularidades inerentes a uma solução não tão simples, mas que é capaz de fazer um grande diferencial no dia a dia de uma empresa que processa em uma única Black Friday mais de 120 milhões de mensagens transacionais. O uso do Apache Kafka na Via Varejo remonta ao ano de 2014 e neste caminho, muitas lições foram aprendidas e são algumas delas que buscamos compartilhar neste artigo.

O nosso primeiro caso de uso com o Apache Kafka foi implementado para resolver problemas de integração entre a nossa plataforma de marketplace e o e-commerce o qual na época tínhamos os seguintes problemas:

  • Lentidão na integração das ofertas dos lojistas marketplace com e-commerce que refletiam em:
  • Um preço ou disponibilidade de uma oferta demorava cerca de 8 horas para refletir no site.
  • O processo era síncrono, e muitas vezes o alto volume das integrações gerava indisponibilidade no site.
  • O time desligava as integrações, ligando somente à noite, para não haver risco de gerar indisponibilidade no site.
  • A maioria das atualizações eram feitas por meio de processos batch.

Esses problemas faziam com que os produtos dos lojistas marketplace que estivessem sem estoque fossem exibidos no site como disponível, ou pior, produtos com preços desatualizados.

O Apache Kafka nos permitiu tornar essas integrações assíncronas e em tempo real, ao invés de integrar com processos batch, passamos a gerar eventos cada vez que uma oferta era criada, atualizada ou deletada, possibilitando atualizações distribuídas, entregando mais throughput.

Atualmente utilizamos o Apache Kafka em vários cenários, em dias normais processamos centenas de milhares de pedidos. Para cada pedido criado, temos mais de 20 eventos relacionados, como: movimentações de estoque, trackings, processamentos de pagamento, notificações ao cliente, entre outros.

O relatório da Confluent de 2018, deixa claro que o aprendizado e o lidar no dia a dia com uma ferramenta como essa não é tão simples conforme as respostas coletadas e representadas na imagem a seguir e consequentemente a contratação de talentos que possam aproveitar todas as funcionalidades de uma solução como esta torna-se um pouco mais difícil.

image

Figura 1 - Taxa de dificuldade na contratação de profissionais especializados - Confluent Report 2018

A partir deste momento, vamos explicitar alguns dos detalhes técnicos e lições aprendidas nos últimos anos iniciando com um overview básico até chegar em aspectos mais avançados.

Sobre a arquitetura do Apache Kafka

A arquitetura do Apache Kafka é organizada em torno de alguns termos chaves, são eles: messagestopicsproducers, consumers groups e os brokers.

O Apache Kafka é uma plataforma de stream (fluxo de dados) de alto throughput que desacopla os produtores de dados dos consumidores de dados. Nele, as mensagens são organizadas em tópicos, os tópicos são divididos em partições, e as partições são replicadas entre os nós denominados brokers.

image

Figura 2 - Exemplo de consumo distribuído

Messages (Mensagens)

No Apache Kafka as mensagens representam a unidade de dados, o registro do seu tópico. Toda mensagem é do tipo chave / valor, e elas são adicionadas sequencialmente ao final de um arquivo de log de uma partição e numeradas por offsets exclusivos. São também persistidas em disco e replicadas no cluster para evitar a perda de dados. As mensagens também possuem um cache de páginas em memória para melhorar a performance de leituras dos dados e ficam disponíveis nas partições até serem excluídas quando ocorrer um TTL ou após uma rotina de compactação.

Offsets são as posições das mensagens em uma partição de um tópico no Apache Kafka.

Topics (Tópicos)

Um tópico é constituído de no mínimo uma partição e zero ou mais réplicas seguidoras, as partições permitem que vários consumidores leiam um tópico em paralelo, permitindo assim uma alta taxa de processamento (figura 2, consumidor B). Essa é uma das características que diferencia o Apache Kafka dos outros MOM (Message-oriented Middlewares), colocando-o como uma solução distribuída de mensageria.

image

Figura 3 - Exemplo de um tópico com três partições - Fonte: Hortonworks Docs

Cada mensagem dentro de uma partição tem um identificador chamado offset, o offset mantém as mensagens ordenadas em uma sequência imutável, permitindo aos consumidores lerem a partir de qualquer ponto do offset.

image

Figura 4 - Consumidor A e B lendo a partir de diferentes offsets

Cada mensagem em um cluster Apache Kafka pode ser identificada exclusivamente por uma tupla que consiste no nome do tópico, na partição, e no offset da partição.

O Apache Kafka mantém as mensagens por um período de tempo configurável, o padrão é de até 7 dias. Se um tópico estiver configurado para manter as mensagens por no máximo 24 horas, e o consumidor ficar inativo por mais de um dia, o consumidor perderá as mensagens; se o consumidor ficar indisponível por uma hora, ele começará a ler a partir do último offset conhecido pelo seu consumer group no Apache Kafka.

Producers (Produtores)

Um produtor é qualquer aplicação que gera mensagens para serem persistidas no Apache Kafka. Um produtor é capaz de publicar mensagens em um ou mais tópicos de um cluster no Apache Kafka.

Consumers (Consumidores)

Os consumidores são os assinantes (leitores) das mensagens de um determinado tópico, a diferença fundamental entre o Apache Kafka e um MOM tradicional é que os consumidores nunca receberão as mensagens automaticamente, eles tem que pedir as mensagens, quando estiverem prontos para processar as mesmas.

Compartilhe
Comentários (0)