Em instâncias do ApsaraMQ for Kafka com versão de servidor 2.2.0, os consumer offsets de um grupo de consumidores ativo nunca são excluídos, independentemente da configuração de Consumer Offset Retention Period. Esse comportamento segue o design do Apache Kafka open source.
Como funciona a retenção de consumer offsets
O parâmetro Consumer Offset Retention Period define por quanto tempo um consumer offset é mantido após o último commit. Quando esse período expira, o sistema exclui completamente o registro de offset, mas não redefine seu valor para 0. Cada novo commit em uma partição de tópico reinicia o temporizador de retenção dessa partição.
A tabela a seguir resume quando os offsets expiram e quando são mantidos:
|
Condição |
Tipo de consumidor |
O offset é excluído após o período de retenção? |
|
Grupo sem consumidores (inativo) |
|
Sim |
|
Grupo cancela assinatura de um tópico, mas permanece ativo em outros |
|
Não |
|
Grupo cancela assinatura de um tópico, mas permanece ativo em outros |
|
Sim |
Um grupo de consumidores é considerado ativo quando possui pelo menos uma thread de consumidor que utiliza o método subscribe. O método assign não torna o grupo ativo.
Por que os offsets persistem em grupos ativos (servidor < 2.6.0)
Nas versões de servidor anteriores à 2.6.0 (incluindo a 2.2.0), o sistema retém os consumer offsets de todos os tópicos enquanto o grupo permanecer ativo, mesmo para tópicos dos quais o grupo já cancelou a assinatura.
Exemplo: Um grupo assina o Tópico A e o Tópico B e, em seguida, cancela a assinatura do Tópico A. O grupo continua ativo devido ao Tópico B. Os offsets de ambos os tópicos não são excluídos.
Se o grupo cancelar a assinatura de todos os tópicos, ele se tornará inativo e os offsets serão excluídos após o término do período de retenção.
Soluções
Atualize para a versão de servidor 2.6.0 ou posterior (recomendado)
A partir da versão 2.6.0, o Kafka exclui offsets expirados de tópicos sem assinatura mesmo quando o grupo ainda está ativo. Não é necessário desconectar os consumidores.
Após a atualização, se um grupo cancelar a assinatura do Tópico A, mas continuar assinando o Tópico B, os offsets do Tópico A serão limpos automaticamente assim que o período de retenção expirar.
Torne o grupo inativo
Se não for possível atualizar, torne o grupo inativo para que o temporizador de retenção tenha efeito. Utilize uma das abordagens a seguir:
|
Abordagem |
Etapas |
Quando utilizar |
|
Aguardar exclusão automática |
Desconecte todos os consumidores do grupo. Os offsets serão excluídos após o término do período de retenção. |
Quando for aceitável aguardar o período de retenção. |
|
Redefinir offsets manualmente |
Desconecte todos os consumidores do grupo e redefina os consumer offsets expirados para 0 em cada partição na página Topic Details do console do ApsaraMQ for Kafka. Acesse a aba Subscriptions e clique em Consumer Details. |
Quando os offsets precisarem ser limpos imediatamente. |
|
Migrar para um novo grupo |
Transfira todos os consumidores para um novo grupo. O grupo original ficará inativo e seus offsets serão excluídos após o término do período de retenção. |
Caso já exista planejamento para reorganizar os grupos de consumidores. |
Verifique o status dos consumer offsets
Para verificar se um grupo ainda mantém consumer offsets de um tópico:
Acesse o console do ApsaraMQ for Kafka.
Acesse a página Topic Details do tópico desejado.
Clique na aba Subscriptions.
Clique em Consumer Details para visualizar os registros de offset.