Por que as mensagens ainda existem após o término do período de retenção?
Se o tempo de envelhecimento tiver sido definido para um tópico, o valor do parâmetro log.retention.hours não terá efeito para o tópico. O valor do parâmetro log.retention.hours terá efeito somente se o tempo de envelhecimento não tiver sido definido para o tópico.
Possível causa 1: cada partição de um tópico consiste em vários arquivos de segmento do mesmo tamanho (500 MB). Quando o tamanho das mensagens armazenadas em um arquivo de segmento atinge 500 MB, outro arquivo de segmento é criado. Kafka exclui arquivos de segmento em vez de mensagens. O Kafka exige que pelo menos um arquivo de segmento seja reservado para armazenar mensagens. Se o arquivo de segmento em uso contiver mensagens antigas, o arquivo de segmento não será excluído. Portanto, as mensagens envelhecidas permanecerão.
Solução: aguarde até que o segmento não esteja mais em uso ou exclua o tópico em que as mensagens atingiram o período de retenção.
Possível causa 2: em um tópico, há uma mensagem cujo CreateTime é um tempo futuro. Por exemplo, suponha que seja 1º de janeiro e CreateTime seja 1º de fevereiro. A mensagem não será envelhecida após 72 horas a partir de agora. Como resultado, as mensagens criadas posteriormente também não serão envelhecidas.
Solução: exclua o tópico onde CreateTime de uma mensagem é um tempo futuro.