Transmitir dados com o Apache Kafka

Concluído

O Apache Kafka foi criado pelo LinkedIn em 2010 com a meta de mover dados em uma escala muito alta com uma latência muito baixa e um alto nível de tolerância a falhas. Em seguida, o LinkedIn doou o projeto para a Apache Foundation em 2012, porém, ele ainda usa o Kafka em todo seu ecossistema para acompanhar a atividade do usuário, trocar mensagens e coletar métricas.

O Kafka é uma plataforma de streaming distribuída que foi projetada para:

  • Simplificar pipelines de dados
  • Lidar com grandes quantidades de dados em um padrão de streaming
  • Dar suporte a sistemas em tempo real e em lote
  • Escalar horizontalmente em grande escala

Primeiro, vamos aprender sobre o Apache Kafka puro e então sobre o Kafka no Azure HDInsight.

Componentes do Kafka

Antes de entendermos como o Kafka funciona, vamos examinar as funções de alguns dos principais componentes do Kafka e como eles se reúnem para fornecer um sistema de mensagens altamente escalonável e tolerante a falhas.

Agente

O Kafka é um serviço clusterizado e um cluster do Kafka individual também é chamado de agente. Os agentes recebem mensagens de produtores e armazenam essas mensagens em disco. O agente também responde às solicitações de busca de consumidores. Dentro de um cluster de agentes, um agente serve como um controlador e é responsável por operações administrativas e atribuição de partições a agentes.

Mensagem

Uma unidade de dados em um cluster do Kafka. As mensagens na maioria das instâncias são pares chave-valor.

Tópicos e partições

Os tópicos e as partições são categorias de mensagens no Kafka. Os tópicos normalmente são divididos em várias partições para aprimoramento geral, sendo recomendado um mínimo de três partições. As mensagens são gravadas em uma partição de tópico de um modo somente acréscimo. As partições são replicadas ainda em vários agentes para aprimorar a redundância em caso de falhas de agente. As partições permitem que a leitura paralela dos tópicos porque permitem dividir os dados entre vários agentes. Há uma réplica líder que processa todas as solicitações de leitura/gravação e os seguidores são replicados do líder. Se um líder falhar, uma das réplicas se tornará a líder.

Produtores e consumidores

Produtores e consumidores são os clientes que produzem e consomem mensagens do sistema Kafka. Os produtores publicam novas mensagens e as direcionam para um tópico específico. Os consumidores também podem ser criados para gravar em uma partição de tópico específica. Os consumidores, por sua vez, assinam um ou mais tópicos e leem mensagens desses tópicos.

Grupo de Consumidores

Um ou mais consumidores podem trabalhar juntos como um grupo e consumir mensagens como um grupo. Se o número de consumidores for igual ao número de partições de tópico, cada consumidor consumirá de uma só partição de tópico, criando paralelismo.

Retenção

As mensagens no Kafka podem ser permanentemente retidas no cluster do Kafka por um período predefinido. Depois que os limites de retenção forem atingidos, o Kafka poderá definir essas mensagens como expiradas e excluí-las.

Deslocamento

Um deslocamento é simplesmente a posição de uma mensagem em uma partição. A ação de atualizar a posição atual em uma partição à medida que as mensagens estão sendo processadas é chamada de commit. Depois que uma mensagem é processada, o Kafka confirma o deslocamento da mensagem para um tópico interno especial do Kafka. Quando um produtor publica uma mensagem em uma partição, ela é encaminhada para o líder. O líder adiciona a mensagem ao log de commit e incrementa o deslocamento da mensagem. O deslocamento da mensagem é como as mensagens são identificadas no tópico. A mensagem só estará disponível para o consumidor depois que tiver sido confirmada no cluster.

Zookeeper

O ZooKeeper é um serviço de coordenação e, em um cluster Kafka, ele fornece uma exibição em sincronia do estado do cluster. O Kafka usa o ZooKeeper para eleição de líder entre as partições de agente e de tópico. O Kafka usa o ZooKeeper para gerenciar a descoberta de serviço para agentes do Kafka que formam o cluster. O ZooKeeper envia alterações da topologia para o Kafka de modo que cada nó do cluster saiba quando um novo agente ingressou, um agente morreu, um tópico foi removido ou um tópico foi adicionado.

Como tudo isso se combina?

Os aplicativos (também conhecidos como produtores) enviam mensagens para um agente do Kafka, que são processadas por um ou vários consumidores. As mensagens em um cluster são categorizadas por tópicos. Por exemplo, um cliente pode criar um tópico "Vendas" para enviar todas as mensagens relevantes para vendas e assim por diante. À medida que o tamanho dos tópicos aumenta com cada vez mais mensagens, eles são divididos em partições, que são, por sua vez, replicadas entre agentes do Kafka para redundância. As partições são categorizadas como líderes e seguidores. A partição líder é gravada e lida, enquanto as partições seguidoras são simplesmente réplicas, que se atualizam com o estado do líder. Para determinar em qual partição gravar e ler, produtores e consumidores precisam saber quais partições foram projetadas como líderes. Nós do ZooKeeper gerenciam o estado do cluster do Kafka e, entre outras coisas, elegem líderes de partição e fornecem essas informações para produtores e consumidores.
O Kafka fornece garantias de que as mensagens com uma partição são ordenadas na mesma sequência em que chegaram. Uma mensagem específica pode ser identificada de maneira distinta por meio do deslocamento, que é sua posição dentro de uma partição. O consumidor lê mensagens de partições e pós-processamento, confirma o deslocamento indicando que a mensagem foi processada com êxito. O Kafka armazena todos os seus registros em disco e mantém a persistência de mensagens. Caso o consumidor seja interrompido por algum motivo e o processamento pare, o Kafka reterá essas mensagens por um período de retenção predeterminado. Ao ficar online novamente, o consumidor poderá reiniciar o processamento do deslocamento confirmado no ponto em que parou antes da interrupção.

How Apache Kafka works

Tópico do Kafka

Um tópico do Kafka é um feed ou uma fila em que as mensagens são armazenadas e publicadas. Os produtores enviam mensagens por push para tópicos e consumidores leem de tópicos. Cada nó em um agente do Kafka pode conter vários tópicos.

Quais são os benefícios do Kafka no Azure HDInsight?

A versão de software livre do Kafka oferece muitos recursos, mas é necessário muito trabalho para configurá-lo. O Azure HDInsight traz o melhor das estruturas de análise de software livre para o Azure e torna mais fácil para os clientes configurarem seus clusters de software livre em minutos, em vez de dedicarem semanas ou meses a configurar esses clusters, e você pode usá-los imediatamente. O HDInsight também está pronto para empresas com os seguintes benefícios:

  • Ele é um serviço gerenciado que fornece um processo de configuração simplificado. O resultado é uma configuração testada e com suporte da Microsoft.
  • A Microsoft fornece um SLA (Contrato de Nível de Serviço) de 99,9% no tempo de atividade do Spark e do Kafka.
  • Ele usa o Azure Managed Disks como repositório de backup para Kafka. O recurso Managed Disks pode fornecer até 16 TB de armazenamento por agente do Kafka, com vários agentes do Kafka.
  • O HDInsight oferece a melhor segurança empresarial com VNets, segurança refinada com o Apache Ranger e criptografia BYOK (Bring Your Own Key) para dados inativos
  • Conformidade com HIPAA, SOC e PCI
  • A capacidade de implantar pipelines de streaming de ponta a ponta com o Spark e o armazenamento por meio de modelos do ARM (Azure Resource Manager) automatizados na mesma VNet.
  • A alta disponibilidade pode ser obtida com Kafka MirrorMaker, que pode consumir registros de tópicos no cluster primário e então criar uma cópia local no cluster secundário.
  • O HDInsight permite que você altere o número de nós de trabalho (que hospedam o agente do Kafka) após a criação do cluster. O dimensionamento pode ser executado a partir do portal do Azure, do Azure PowerShell e de outras interfaces de gerenciamento do Azure. Para Kafka você deve redistribuir as réplicas de partição após as operações de dimensionamento. Redistribuir as partições permite ao Kafka aproveitar o novo número de nós de trabalho.
  • Os logs do Azure Monitor podem ser usados para monitorar o Kafka no HDInsight. O Azure Monitor registra em log as informações de nível da máquina virtual da superfície, como métricas de disco e NIC e métricas JMX do Kafka.