Apache Kafka - WorkFlow

A partir de agora, discutimos os principais conceitos de Kafka. Vamos agora lançar algumas luzes sobre o fluxo de trabalho de Kafka.

Kafka é simplesmente uma coleção de tópicos divididos em uma ou mais partições. Uma partição Kafka é uma sequência de mensagens ordenada linearmente, em que cada mensagem é identificada por seu índice (chamado de deslocamento). Todos os dados em um cluster Kafka são a união desarticulada de partições. As mensagens de entrada são gravadas no final de uma partição e as mensagens são lidas sequencialmente pelos consumidores. A durabilidade é fornecida pela replicação de mensagens para diferentes corretores.

O Kafka fornece sistema de mensagens baseado em fila e pub-sub de maneira rápida, confiável, persistente, com tolerância a falhas e tempo de inatividade zero. Em ambos os casos, os produtores simplesmente enviam a mensagem a um tópico e o consumidor pode escolher qualquer tipo de sistema de mensagens, dependendo de sua necessidade. Vamos seguir as etapas na próxima seção para entender como o consumidor pode escolher o sistema de mensagens de sua escolha.

Fluxo de trabalho de mensagens Pub-Sub

A seguir está o fluxo de trabalho detalhado do Pub-Sub Messaging -

  • Os produtores enviam mensagens para um tópico em intervalos regulares.

  • O broker Kafka armazena todas as mensagens nas partições configuradas para esse tópico específico. Isso garante que as mensagens sejam compartilhadas igualmente entre as partições. Se o produtor enviar duas mensagens e houver duas partições, o Kafka armazenará uma mensagem na primeira partição e a segunda mensagem na segunda partição.

  • O consumidor se inscreve em um tópico específico.

  • Depois que o consumidor assina um tópico, Kafka fornecerá o deslocamento atual do tópico para o consumidor e também salvará o deslocamento no conjunto Zookeeper.

  • O consumidor solicitará o Kafka em um intervalo regular (como 100 ms) para novas mensagens.

  • Assim que o Kafka recebe as mensagens dos produtores, ele as encaminha para os consumidores.

  • O consumidor receberá a mensagem e a processará.

  • Assim que as mensagens forem processadas, o consumidor enviará uma confirmação ao corretor Kafka.

  • Depois que Kafka recebe uma confirmação, ele altera o deslocamento para o novo valor e o atualiza no Zookeeper. Uma vez que as compensações são mantidas no Zookeeper, o consumidor pode ler a próxima mensagem corretamente, mesmo durante os ataques do servidor.

  • Este fluxo acima se repetirá até que o consumidor interrompa a solicitação.

  • O consumidor tem a opção de retroceder / pular para o deslocamento desejado de um tópico a qualquer momento e ler todas as mensagens subsequentes.

Fluxo de trabalho da fila de mensagens / grupo de consumidores

Em um sistema de mensagens em fila, em vez de um único consumidor, um grupo de consumidores com o mesmo ID de Grupo se inscreverá em um tópico. Em termos simples, os consumidores que se inscrevem em um tópico com o mesmo ID de grupo são considerados como um único grupo e as mensagens são compartilhadas entre eles. Vamos verificar o fluxo de trabalho real deste sistema.

  • Os produtores enviam mensagens para um tópico em intervalos regulares.

  • O Kafka armazena todas as mensagens nas partições configuradas para esse tópico específico, semelhante ao cenário anterior.

  • Um único consumidor assina um tópico específico, suponha que Topic-01 com ID de Grupo seja Group-1 .

  • Interage Kafka com o consumidor da mesma forma como Pub-Sub Messaging até novo consumidor subscreve o mesmo tema, tópico-01 com a mesma ID do grupo como Grupo-1 .

  • Assim que o novo consumidor chega, Kafka muda sua operação para o modo de compartilhamento e compartilha os dados entre os dois consumidores. Esse compartilhamento continuará até que o número de consumidores atinja o número de partição configurada para aquele tópico específico.

  • Uma vez que o número de consumidores excede o número de partições, o novo consumidor não receberá mais nenhuma mensagem até que qualquer um dos consumidores existentes cancele a assinatura. Este cenário surge porque cada consumidor no Kafka receberá no mínimo uma partição e, uma vez que todas as partições sejam atribuídas aos consumidores existentes, os novos consumidores terão que esperar.

  • Esse recurso também é chamado de Grupo de Consumidores . Da mesma forma, Kafka fornecerá o melhor de ambos os sistemas de uma maneira muito simples e eficiente.

Papel do ZooKeeper

Uma dependência crítica do Apache Kafka é o Apache Zookeeper, que é um serviço de configuração e sincronização distribuído. O Zookeeper serve como interface de coordenação entre os corretores e consumidores Kafka. Os servidores Kafka compartilham informações por meio de um cluster Zookeeper. O Kafka armazena metadados básicos no Zookeeper, como informações sobre tópicos, corretores, compensações de consumidor (leitores de fila) e assim por diante.

Como todas as informações críticas são armazenadas no Zookeeper e ele normalmente replica esses dados em seu conjunto, a falha do Kafka broker / Zookeeper não afeta o estado do cluster Kafka. Kafka restaurará o estado assim que o Zookeeper for reiniciado. Isso dá tempo de inatividade zero para Kafka. A eleição do líder entre o corretor Kafka também é feita usando o Zookeeper em caso de falha do líder.

Para saber mais sobre Zookeeper, consulte zookeeper

Vamos continuar com a instalação de Java, ZooKeeper e Kafka em sua máquina no próximo capítulo.