O ApsaraMQ for Kafka exclui os consumer offsets após o período de retenção configurado. No entanto, os consumer offsets de um Group ativo permanecem mesmo depois de expirarem. Este tópico explica a causa e apresenta soluções.
Sintoma
Em um servidor do ApsaraMQ for Kafka versão 2.2.0, os consumer offsets de um Group ultrapassam o período de retenção configurado, mas não são excluídos. Você ainda consegue visualizar esses consumer offsets no console: abra a página Topic Details no console do ApsaraMQ for Kafka, clique em na aba Subscriptions e visualize os Consumer Details do tópico desejado.
O parâmetro Consumer Offset Retention Period define o tempo máximo de retenção de um consumer offset, contado a partir da confirmação (commit). Consumer offsets que excedem esse período são excluídos. A exclusão não redefine o offset para 0; simplesmente remove o registro existente. Cada nova confirmação de consumer offset em uma partição de tópico reinicia o contador de retenção desse offset. Para mais informações, consulte Modify message configurations.
Causas possíveis
Conforme o design open source do Kafka, os consumer offsets de um Group ativo não são excluídos, mesmo quando ultrapassam o período de retenção configurado.
Um Group é considerado ativo quando possui pelo menos uma thread de consumidor utilizando o método subscribe, em vez do método assign.
Por exemplo, suponha que você crie um Group chamado TestGroup para assinar o TopicA e confirmar consumer offsets. Devido a uma mudança de negócio, você cancela a assinatura do TopicA e passa a assinar o TopicB. Como o TestGroup permanece ativo, os consumer offsets desse Group tanto no TopicA quanto no TopicB não são excluídos.
Se você apenas cancelar a assinatura do TopicA sem assinar o TopicB, o TestGroup se torna inativo. Nesse caso, os consumer offsets do TestGroup no TopicA serão excluídos assim que excederem o período de retenção.
Soluções
Para excluir consumer offsets expirados, utilize um dos métodos abaixo:
-
Desconecte todas as threads de consumidor que utilizam o método
subscribepara tornar o Group inativo e adote uma das seguintes abordagens conforme sua necessidade:Aguarde a expiração natural dos consumer offsets. Após expirarem, eles serão excluídos automaticamente.
Redefina os consumer offsets expirados para 0 por partição diretamente no console.
Migre para um novo Group, torne inativas todas as threads de consumidor do Group original e aguarde a expiração dos consumer offsets originais. Eles serão removidos automaticamente após o vencimento.
Atualize a versão do servidor para 2.6.0.
Mantenha a conexão do Group ativa e cancele a assinatura dos tópicos desnecessários ao seu negócio. Mesmo com o Group ativo, os consumer offsets dos tópicos não assinados serão limpos após excederem o período de retenção.
Após aplicar um dos métodos acima, verifique o resultado no console. Acesse a página Topic Details, clique em na aba Subscriptions e consulte os Consumer Details do tópico. Se os consumer offsets foram excluídos, nenhum registro existirá. Caso tenha redefinido os valores para 0, os consumer offsets permanecerão visíveis com valor 0.