Introdução ao Grupo de Consumidores Kafka
O grupo de consumidores Kafka é basicamente um número de consumidores Kafka que podem ler dados em paralelo a partir de um tópico Kafka. Um grupo de consumidores Kafka possui as seguintes propriedades:
- Todos os consumidores de um grupo têm o mesmo group.id.
- Cada partição no tópico é lida por apenas um Consumidor.
- O número máximo de Consumidores é igual ao número de partições no tópico. Se houver mais consumidores do que partições, alguns deles permanecerão ociosos.
- Um consumidor pode ler em mais de uma partição.
Importância do Grupo de Consumidores Kafka
Para uma organização de varejo, haverá um grande número de produtores gerando dados a uma taxa enorme. Agora, para ler um grande volume de dados, precisamos de vários Consumidores executando paralelamente. É comparativamente mais fácil no lado do produtor, onde cada produtor gera dados independentemente dos outros. Mas, no lado do consumidor, se houver mais de um consumidor lendo o mesmo tópico, há uma grande chance de que cada mensagem seja lida mais de uma vez. Kafka resolve esse problema usando o Consumer Group. Em qualquer caso, apenas um consumidor pode ler dados de uma partição.
Partições do Kafka Consumer Group
Vamos supor que temos um tópico Kafka e há 4 partições nele. Então, podemos ter os seguintes cenários:
1. Número de consumidores = Número de partições
Nesse caso, cada consumidor lerá os dados de cada partição e este é o caso ideal.
2. Número de consumidores> Número de partições
Nesse caso, um consumidor permanecerá ocioso e levará a uma má utilização do recurso.
3. Número de consumidores <Número de partições
Nesse caso, um dos consumidores lerá dados de mais de uma partição.
4. Número de grupos de consumidores> 1
Nesse caso, o tópico é inscrito por mais de um grupo de consumidores que atende a dois aplicativos diferentes. Os dois aplicativos podem ser executados independentemente um do outro.
Vantagens do Kafka Consumer Group
O Consumer Group adiciona as seguintes vantagens:
- Escalabilidade: vários consumidores que lêem dados em paralelo aumentam definitivamente a taxa de consumo de dados e tornam o sistema capaz de ler um grande volume de dados.
- Tolerância a falhas: suponha que tivéssemos apenas um consumidor (para ler um volume de dados não tão alto), o que aconteceria se o consumidor falhasse por algum motivo? Todo o pipeline irá quebrar.
- Balanceamento de carga: Kafka compartilha as partições de maneira justa para cada consumidor, tornando o processo de consumo de dados suave e eficiente.
- Rebalanceamento: se um novo Consumidor for adicionado ou um existente parar, o Kafka reequilibra a carga nos Consumidores disponíveis.
Como Kafka faz uma ponte entre os dois modelos?
Vamos discutir primeiro os dois modelos de mensagens.
1. Filas de mensagens
Nesse modelo, um fluxo de mensagens é enviado de um produtor para apenas um consumidor. Assim, cada mensagem é somente leitura uma vez e, uma vez que um consumidor recebe uma mensagem, a mensagem é apagada da fila. Um exemplo típico pode estar emitindo um cheque de pagamento em que cada cheque deve ser emitido apenas uma vez. Além disso, este modelo não garante que as mensagens sejam entregues em ordem. A escalabilidade do processamento de mensagens é limitada a um único domínio.
2. Mensagens de publicação-assinatura
Nesse modelo, as mensagens publicadas por um produtor podem ser assinadas por mais de um consumidor. O produtor e o consumidor são dissociados em grande parte. Esse modelo garante que cada consumidor receba mensagens em um tópico na ordem exata gerada pelo produtor. Um exemplo típico pode ser uma TV parabólica que publica diferentes canais, como música, filme, esportes etc., e os consumidores podem se inscrever em mais de um canal. Como há vários assinantes de um tópico, escalar o processamento de fluxos é um desafio.
O Kafka é tão popular porque, embora seja baseado no modelo de publicação-assinatura, possui as vantagens de um sistema de filas de mensagens. Como discutido anteriormente, se tivermos um grupo de consumidores, o Kafka garante que cada mensagem em um tópico seja somente leitura uma vez por um consumidor (que é semelhante a um sistema de fila de mensagens). As vantagens adicionais são que as mensagens são retidas pelos intermediários (por algum tempo, tornando-as tolerantes a falhas) e, se tivermos mais de um grupo de consumidores, eles podem ler mensagens do mesmo tópico, mas processá-las de maneira diferente.
Implicação de Caso de Uso
Vamos supor que tenhamos uma plataforma em nuvem simples em que permitimos as seguintes operações aos usuários:
- Armazene arquivos no Cloud.
- Veja os arquivos deles na nuvem.
- Faça o download dos arquivos deles na nuvem.
No começo, tínhamos uma base de usuários muito pequena. Queríamos obter várias estatísticas (a cada hora), como usuários ativos, número de solicitações de upload, número de solicitações de download e assim por diante. Para atender aos requisitos, configuramos um Cluster Kafka que produz os logs (gerados por nosso aplicativo) em um tópico e existe um aplicativo que consome o tópico (usando um Consumidor) e depois o processa para gerar as estatísticas necessárias e finalmente exibir aqueles em uma página da web.
À medida que as pessoas começaram a gostar de nossos serviços, mais pessoas começaram a usá-lo, gerando muitos registros por hora. Descobrimos que o aplicativo que consome o tópico ficou extremamente lento, pois estávamos usando apenas um consumidor. Para solucionar o problema, adicionamos alguns Consumidores ao grupo e encontramos melhorias significativas no desempenho.
Nos deparamos com outro requisito, no qual tínhamos que gravar os logs em um cluster HDFS e esse processo deveria ser executado independentemente do aplicativo anterior (isso ocorre porque, com o aumento dos dados, planejávamos descomissionar o primeiro aplicativo e obter todas as estatísticas no ambiente HDFS). Para atender a esse requisito, desenvolvemos outro aplicativo que se inscreveu no tópico usando um grupo de Consumidores diferente e gravou os dados no cluster HDFS.
Artigos recomendados
Este é um guia do Kafka Consumer Group. Aqui discutimos a importância do grupo de consumidores Kafka e como o Kafka faz a ponte entre dois modelos e sua implicação de caso de uso. Você também pode consultar os seguintes artigos para saber mais:
- Kafka Applications
- Como instalar o Kafka?
- Kafka Interview Questions
- Arquitetura HDFS
- Diferentes tipos de ferramentas Kafka