Mesmo após o término do período de retenção, ainda é possível consultar uma mensagem no broker do ApsaraMQ for Kafka. Isso ocorre porque o ApsaraMQ for Kafka exclui mensagens no nível de segmento, e não individualmente.
Como funciona a exclusão baseada em segmentos
Para evitar fragmentação de armazenamento, o ApsaraMQ for Kafka armazena mensagens em segmentos. Por padrão, cada segmento comporta até 1 GB de dados. Durante o ciclo de exclusão, o sistema remove segmentos inteiros em vez de mensagens individuais.
O ciclo de vida de um segmento segue as etapas abaixo:
Aberto: O segmento recebe novas mensagens e permanece nesse estado até atingir o limite de 1 GB.
Fechado: Ao alcançar 1 GB, o segmento não aceita mais mensagens.
Elegível para exclusão: Um segmento fechado cujas mensagens ultrapassaram o Message Retention Period configurado torna-se elegível para exclusão.
Como o ApsaraMQ for Kafka só exclui segmentos fechados, quaisquer mensagens expiradas dentro de um segmento aberto são retidas até que esse segmento seja fechado e, posteriormente, excluído.
Causas
Uma mensagem expirada é retida quando uma das condições a seguir se aplica:
O segmento ainda não atingiu 1 GB. O segmento que contém a mensagem expirada continua aberto e recebendo novas mensagens. Tópicos com baixo throughput geram segmentos que demoram mais para chegar ao limite de 1 GB, o que atrasa a exclusão.
O uso do disco está abaixo de 75%. Quando o uso do disco permanece inferior a 75%, o ApsaraMQ for Kafka exclui mensagens expiradas conforme uma programação fixa: uma vez por dia, às 04:00. As mensagens expiradas persistem até a próxima execução programada.
Limiares de exclusão baseados em disco
O ApsaraMQ for Kafka utiliza dois limiares de uso de disco para gerenciar a retenção de mensagens:
|
Uso do disco |
Comportamento |
|
Abaixo de 75% |
Mensagens expiradas são excluídas uma vez por dia, às 04:00. |
|
85% ou superior |
As mensagens são excluídas imediatamente, começando pelas mais antigas, independentemente da configuração de Message Retention Period. |
Quando o uso do disco atinge 85%, o sistema prioriza a disponibilidade do serviço em detrimento das configurações de retenção. As mensagens são excluídas a partir das mais antigas armazenadas, mesmo que não tenham atingido o Message Retention Period configurado.
Message Retention Period
O parâmetro Message Retention Period define a duração máxima de retenção das mensagens quando há capacidade de disco suficiente.
|
Propriedade |
Valor |
|
Intervalo válido |
24 a 480 horas |
|
Padrão |
72 horas |
Essa configuração estabelece um limite máximo, não uma garantia. A retenção real depende do status do segmento e do uso do disco, conforme descrito nas seções anteriores.
Solução de problemas
Caso as mensagens expiradas persistam por mais tempo que o esperado, verifique os itens a seguir:
Verifique a utilização dos segmentos. Tópicos com baixo throughput produzem segmentos que demoram mais para atingir o limite de 1 GB, atrasando a exclusão. Para identificar se essa é a causa, analise o volume de dados do tópico. Se o tópico receber um volume baixo de mensagens, o segmento ativo poderá permanecer aberto por um longo período. Aumente o volume de mensagens ou aguarde o preenchimento e fechamento natural do segmento para resolver esse problema.
Analise o uso do disco. Se o uso do disco estiver abaixo de 75%, as mensagens expiradas serão excluídas apenas na próxima execução programada (diariamente às 04:00). Monitore o uso do disco pelo console do ApsaraMQ for Kafka para confirmar essa condição.
Revise a configuração do período de retenção. Confirme se o Message Retention Period está definido com o valor desejado para o tópico no console do ApsaraMQ for Kafka. O intervalo válido é de 24 a 480 horas, com padrão de 72 horas.