Redefinir um consumer offset altera a posição atual de consumo de um assinante. Se um consumidor falhar ou processar dados incorretos, redefina o consumer offset para retornar a uma posição anterior e reiniciar o consumo. Alternativamente, mova a posição de consumo para o offset mais recente para ignorar temporariamente mensagens acumuladas.
Informações básicas
ApsaraMQ for RocketMQ utiliza consumer offsets para gerenciar o progresso do consumo de mensagens. Após o processamento de uma mensagem pelo consumidor, ela não é excluída imediatamente da fila. ApsaraMQ for RocketMQ mantém um registro de consumo para cada grupo. Esse registro, conhecido como consumer offset, indica o offset da mensagem mais recente consumida pelos consumidores do grupo em um tópico específico.
Quando um cliente consumidor fica offline e retorna, ele retoma o processamento das mensagens com base no progresso de consumo salvo no servidor.
Se o consumo apresentar anomalias ou se o consumer offset atual estiver incorreto, ajuste o progresso de consumo redefinindo o consumer offset.
ApsaraMQ for RocketMQ oferece as seguintes formas de redefinição de consumer offsets:
-
Start Consumption from Latest Offset
Os consumidores que processam mensagens em um tópico específico ignoram todas as mensagens acumuladas e iniciam o consumo a partir da mensagem mais recente enviada após a operação de redefinição.
-
Start Consumption from Offset Corresponding to Specified Point in Time
Os consumidores processam mensagens a partir do consumer offset correspondente ao horário especificado, independentemente de essas mensagens terem sido consumidas anteriormente.
O intervalo de tempo selecionável compreende o período entre os horários de criação da mensagem mais antiga e da mais recente armazenadas no tópico.
Ao redefinir para um consumer offset em um ponto específico no tempo, o servidor localiza automaticamente o consumer offset correspondente mais próximo.
Cenários
Limpeza de acúmulo de mensagens: caso o desempenho do sistema de consumo downstream seja insuficiente ou a velocidade de consumo seja menor que a de produção, muitas mensagens podem se acumular. Se for possível descartar essas mensagens acumuladas, redefina o consumer offset para uma posição específica. Isso permite contornar as mensagens acumuladas e reduzir a pressão de processamento no sistema downstream.
Retrocesso para correção: quando a lógica de negócios de consumo apresenta falhas e as mensagens são processadas incorretamente, pode ser necessário reconsumi-las. Para isso, redefina o consumer offset para uma posição histórica e habilite o retrocesso do consumo.
Observações de uso
A redefinição de um consumer offset aplica-se ao consumer offset de um grupo especificado para um tópico de destino. Ela não afeta o progresso de consumo de outros grupos assinantes do mesmo tópico.
Não há suporte para redefinição de consumer offsets no modo de consumo por broadcast.
ApsaraMQ for RocketMQ permite a redefinição de consumer offsets apenas para grupos que utilizam o protocolo TCP. Grupos que usam o protocolo HTTP não têm suporte para esse recurso.
O recurso de redefinição de consumer offset atua somente sobre mensagens visíveis aos consumidores. Não é possível redefinir mensagens agendadas ou aquelas aguardando nova tentativa.
A redefinição de consumer offsets só é permitida quando os consumidores estão online.
Procedimento
Faça login no console do ApsaraMQ for RocketMQ. No painel de navegação à esquerda, clique em Instances.
Na barra de navegação superior, selecione uma região, como China (Hangzhou). Na página Instances, clique no nome da instância que deseja gerenciar.
No painel de navegação à esquerda, clique em Groups. Em seguida, clique na aba TCP.
Localize o ID do grupo cujo consumer offset será redefinido. Na coluna Actions, clique em More e selecione Reset Consumer Offset no menu suspenso.
-
No painel Reset Consumer Offset, selecione o tópico de destino e o método de redefinição e clique em OK.
AvisoSe você selecionar Start Consumption from Latest Offset, todas as mensagens acumuladas para o ID do grupo no tópico especificado serão limpas. Essa operação leva aproximadamente 2 a 3 minutos para entrar em vigor. Não repita a operação. Durante esse período, todos os consumidores da aplicação pausam o consumo por 2 a 3 minutos. Tenha cautela se sua aplicação for sensível a latência.
Start Consumption from Latest Offset: ao escolher esta opção, os consumidores do grupo ignoram todas as mensagens acumuladas no tópico especificado e iniciam o consumo a partir da mensagem mais recente.
Start Consumption from Offset Corresponding to Specified Point in Time: ao optar por este método, um controle de seleção de tempo é exibido. Especifique um ponto no tempo para que os consumidores passem a processar as mensagens enviadas após esse horário, independentemente de terem sido consumidas antes.
Na caixa de diálogo Prompt, confirme as informações e clique em OK.
Perguntas frequentes
O que fazer se a redefinição do consumer offset falhar em ambos os métodos?
Verifique se você está utilizando o consumo por clustering. O modo de consumo por broadcast não suporta a redefinição de consumer offsets.
Confirme se o consumidor está online. A redefinição de consumer offsets só é possível quando os consumidores estão ativos.
Verifique a versão do SDK. Esse problema pode ocorrer se a versão do SDK estiver desatualizada. Recomendamos atualizar o SDK para a versão mais recente. Por exemplo, a versão do SDK do cliente TCP para Java deve ser 1.8.0.Final ou posterior. Para mais detalhes, consulte Guia de versões.
Por que algumas mensagens não são redefinidas após redefinir o consumer offset para ignorar mensagens acumuladas?
O recurso de redefinição de consumer offset não se aplica a mensagens em estado de nova tentativa. Portanto, um pequeno número de mensagens aguardando retry ainda pode ser entregue após a redefinição.
Qual é a mensagem mais antiga que os consumidores podem reconsumir ao redefinir o consumer offset?
Ao redefinir um offset para um ponto específico no tempo, o horário mais antigo selecionável corresponde ao momento em que a primeira mensagem do tópico foi armazenada. Instâncias da série 4.x do ApsaraMQ for RocketMQ retêm mensagens por no máximo 3 dias. Mensagens com mais de 3 dias são excluídas do tópico.
Consequentemente, os consumidores podem reconsumir mensagens de até 3 dias atrás mediante a redefinição do consumer offset.
Referências
Além do console, o ApsaraMQ for RocketMQ permite redefinir consumer offsets por meio de chamadas de API.