27 Outubro 2017

Apache Kafka – Introdução a uma Plataforma de Transmissão de Dados

1. Apache Kafka – O que é?

O Apache Kafka é uma plataforma de transmissão de dados distribuída, semelhante a uma fila de mensagens ou um sistema de mensagens corporativo. Foi desenvolvido para providenciar em tempo real um fluxo de dados com baixa latência e uma alta taxa de transferência, tendo como principal objetivo a construção de ligações de transmissão de dados entre sistemas para obtenção dos mesmos e funciona como um cluster em um ou mais servidores, guardando o registo da transmissão de dados em categorias chamados de Tópicos.

2. O Início

A base do Kafka nasceu pelo Linkedin e mais tarde tornou-se num projeto open source da Apache em 2011. O Kafka começou a ganhar forma inicialmente, quando os engenheiros na LinkedIn precisavam duma maneira de tornar possível uma transmissão de mensagens numa grande escala, então desenvolveram uma base que mais tarde deu ao nascimento do Apache Kafka.

A equipa da LinkedIn precisava de redesenhar completamente a infraestrutura para acomodar o crescimento dos membros e o aumento da complexidade do site. O primeiro passo foi migrar a infraestrutura de uma aplicação monolítica para uma baseada em micro serviços e desenvolver diferentes e customizadas ligações de dados para várias filas de fluxos de dados. Eles tinham vários casos de uso na plataforma, como por exemplo o rastreamento da atividade dos eventos como visualizações de páginas para recolha e agregação de logs de outros serviços ou ligações para permitir uma fila de mensagens ao In Mail do LinkedIn, etc. Isto tudo precisava de escalar juntamente com o site, então em vez de manter e escalar cada ligação individualmente, a equipa investiu em desenvolver uma plataforma de publicação-subscrição singular e distribuída e com isto nasceu o Apache Kafka.

3. Alguns Uses Cases

• Rastreamento da Atividade num Website

Uma maneira de rastrear toda a atividade num website, ou seja, todas as ações que os utilizadores possam tomar, como por exemplo visualizações de páginas ou pesquisas, são publicadas numa central de tópicos com um tópico por atividade. Esta atividade envolve um alto volume de dados por causa do número de mensagens que são geradas por cada visualização de páginas por utilizador.

• Mensagens

Tem uma melhor taxa de transferência, particionamento, replicação e tolerância de falha em comparação com muitos dos sistemas de mensagens, o que faz do Kafka uma boa solução para uma aplicação de processamento de comunicações em larga escala.

• Agregação de Logs

É uma forte escolha quando precisamos de recolher logs de múltiplos serviços transversalmente a uma organização, e fazer com que as mesmas fiquem disponíveis num formato standard para múltiplos utilizadores.

• Processamento da Transmissão de Dados

Tem uma forte durabilidade em termos de processamento, lê dados dum tópico em formato ainda não tratado e transforma ou processa de forma a escrever em novos tópicos, para mais tarde ser consumido.

• Métricas

Pode ser usado para monitorizar dados operacionais, ou seja, agregar estatísticas de aplicações distribuídas e produzir fluxo de dados operacionais e alertas.

4. Arquitetura e algumas palavras chave

O Kafka consiste em Tópicos, Brokers, Partições, Líderes e Réplicas, estas são as principais palavras chave no funcionamento do Kafka.

Um Tópico é uma categoria ou um nome dum fluxo em que os registos são publicados, isto significa que cada tópico tem diferente informação uns dos outros, e o Kafka mantém ordem dentro do tópico, mas não entre tópicos. Os Tópicos estão divididos num número de partições que permite paralelizar um tópico, dividindo os dados num tópico em particular através de múltiplos Brokers.

Um Broker por outro lado é responsável por gerir e replicar mensagens que entram no cluster do Kafka, mantendo um número de partições e cada uma destas tanto pode ser um Líder ou um Réplica para um Tópico. Processos de escrita e leitura passam por um Líder e o mesmo coordena e atualiza Réplicas com a nova informação, concluindo que se um Líder falha, uma Réplica fica no seu lugar como novo Líder.

Depois temos as principais API’s de comunicação com o Apache Kafka:

• Produtor
Tem a principal função de introduzir as mensagens para os Tópicos do Kafka, permitindo às aplicações publicar fluxos de registos. Escreve para um só Líder, providenciando uma produção balanceada de carregamento para que cada processo de escrita possa ser servido por um Broker e uma máquina em separado.

• Consumidor
Retira mensagens dum Tópico Kafka, permitindo que as aplicações subscrevam ao mesmo tópico e processem o fluxo de registos. Lê duma só partição dando a opção de escalar através do consumo de mensagens num estilo similar a uma produção de mensagens. Pode também ser organizado em forma de grupo de consumidores para um dado tópico, cada consumidor dentro do grupo lê duma única partição e o grupo como um todo consome todas a mensagens do tópico inteiro.

O Kafka pode dar certas garantias quanto à consistência e disponibilidade de dados quando estamos a produzir para uma partição e a consumir também de uma partição. Não se pode aplicar quando estamos a ler da mesma partição usando mais que um consumidor ou a escrever para a mesma partição usando mais do que um produtor.

Tendo em mente estes requisitos, o Kafka pode garantir:
- Quando mensagens são enviadas para um tópico de uma partição, ele vai ser acrescentado ao log de commit com a ordem que foi enviado;
- Uma só instância de consumidor vai ver mensagens com a ordem que elas aparecem no log;
- Uma mensagem é commited quando todas as réplicas subscreveram-se ao log das mesmas;
- Qualquer mensagem que seja commited não vai ser perdida desde que pelo menos uma réplica sincronizada esteja a correr.

• Escrita

No processo de escrita, todas as mensagens são enviadas para o líder da partição, e o líder é responsável por escrever a mensagem para as suas réplicas que estão sincronizadas com o mesmo, e logo que a mensagem seja commited, o líder é responsável também por propagar a mensagem às réplicas adicionais nos diferentes Brokers. Cada réplica quando percebe que recebeu a mensagem pode depois ser chamada de sincronizada, tendo em mente que às vezes líderes e réplicas podem falhar.

• Na falha

Se uma réplica falha na escrita, não vai chegar mais nada à mesma réplica, ou seja, a réplica não vai receber mais mensagens, falhando sempre e estando dessincronizada com o líder.

Num caso de todas as réplicas falharem, ficamos com duas opções de solução, primeiro podemos esperar que o último líder volte a ficar ativo antes de continuar, depois disso, ele vai começar a receber e a escrever mensagens para as réplicas, conforme vão ficando disponíveis ou ativas, sincronizando mensagens entre elas. A segunda opção é eleger o primeiro broker que volte como líder, este broker vai ficar fora de sincronização com o líder existente e toda a informação escrita nesse tempo entre quando o broker foi abaixo e foi eleito o novo líder vai ser perdida. Eleger um novo líder pode permitir que algumas mensagens sejam esquecidas, mas vai minimizar o tempo de serviço em baixo, pois qualquer nova máquina pode ser um líder.

Finalmente, num caso do líder falhar o controlador do Kafka vai detetar a perda e vai eleger um novo líder escolhendo entre as réplicas que estão sincronizadas. Isto pode demorar uns segundos, mas não obtemos nenhuma perda de informação desde que os produtores e consumidores lidem com isso, tentando de novo a conexão.

5. Conclusão

No momento de escolher uma plataforma para transmissão de dados, o Kafka é uma escolha forte e sólida devido às suas capacidades de paralelismo, dando-nos uma separação de consumidores e produtores de informação, fazendo com que a nossa arquitetura fique mais flexível e adaptável à mudança, permitindo um grande número de consumidores ad-hoc ou permanentes. Tem uma alta disponibilidade, flexibilidade quanto a falhas dos nós, suportando assim recuperação automática.

O Kafka traz uma solução para o Big Data e o Internet of Things, tendo uma maneira de processar um volume muito alto de informação, oferecendo também um forte e altamente recomendado sistema de mensagens para ligações de informação dentro de uma organização.

Aqui estão algumas entidades que usam um Sistema Kafka:

 

   

      

     

     

      Sílvio Moura
  Junior Consultant