01
Retenção por tempo e compactação por chave não são a mesma alavanca
A confusão começa porque as duas políticas aparecem lado a lado na mesma tela de configuração e as duas reduzem o tamanho do tópico. A semelhança termina aí. A retenção por tempo apaga segmentos inteiros com base na idade: passados os sete dias, tudo o que estava naquele arquivo some, sem que ninguém olhe o conteúdo. A compactação por chave preserva o último valor conhecido de cada chave para sempre e descarta apenas as versões anteriores daquela mesma chave. A primeira é uma política de esquecimento cronológico, a segunda é uma política de deduplicação por identidade.
A consequência prática é que as duas respondem a perguntas diferentes. Com retenção por tempo, a pergunta que o tópico responde é: o que aconteceu nos últimos N dias. Com compactação, a pergunta é: qual é o estado atual de cada entidade. Um serviço que precisa reconstruir um saldo somando todos os lançamentos depende da primeira. Um serviço que precisa saber apenas o endereço atual de cada cliente depende da segunda, e ficaria satisfeito com um tópico compactado de um centésimo do tamanho.
O erro do incidente descrito na abertura foi tratar as duas como intercambiáveis porque ambas apareciam como formas de reduzir disco. Reduzir a janela de retenção destruiu a capacidade de reprocessar, que era a propriedade que o time achava que estava comprando. Ligar compactação naquele tópico teria sido igualmente destrutivo por outro caminho: o histórico de lançamentos teria virado um saldo por conta, e a auditoria exigida em contrato sumiria em silêncio, sem nenhum erro, sem nenhum alerta, apenas com números que deixam de bater três meses depois.
| Propriedade | Retenção por tempo | Compactação por chave | Consequência prática |
|---|---|---|---|
| Critério de descarte | Idade do segmento, independentemente do conteúdo | Existência de versão mais recente da mesma chave | Compactar não libera espaço em tópico de chaves únicas |
| O que fica garantido | Todo evento dentro da janela, inclusive os intermediários | O último valor de cada chave, sem garantia dos anteriores | Só a retenção permite recontar a partir do zero |
| O que se perde | Tudo o que é mais antigo que a janela | Todas as transições intermediárias de cada chave | Compactação destrói a trilha de auditoria de mudança |
| Tamanho em regime permanente | Proporcional à taxa de eventos vezes a janela | Proporcional ao número de chaves distintas | Compactação limita crescimento, retenção limita idade |
| Eventos sem chave | Tratados como qualquer outro | Nunca removidos, acumulam indefinidamente | Um produtor esquecido sem chave anula a economia toda |
| Apagar uma entidade | Acontece sozinho quando a janela passa | Exige lápide explícita e só depois some | Direito ao esquecimento vira trabalho de aplicação |
A quinta linha é a que produz o maior número de decepções em produção. Um tópico compactado onde metade dos produtores emite eventos sem chave não encolhe pela metade: ele encolhe apenas na parte com chave e continua crescendo linearmente na outra, porque o núcleo do mecanismo não tem nenhum critério para comparar dois registros sem identidade. O gráfico de tamanho depois de ligar a compactação fica com um degrau para baixo seguido da mesma inclinação de antes, e o time conclui erroneamente que a compactação não funciona.