Flink
Nível médioPor que meu job do Flink está descartando silenciosamente eventos que chegam atrasados?
Uma watermark é a própria afirmação do Flink de que não vão chegar mais eventos anteriores a um certo momento - não uma medição. Uma agressiva demais fecha uma janela antes dos dados reais chegarem, sem nenhum erro.
Um evento que chega depois que sua janela já disparou não dá erro, não loga e não tenta de novo - simplesmente some, e o resultado da janela fica silenciosamente abaixo da contagem real.
O que uma watermark realmente afirma
Uma watermark é a própria afirmação do Flink - "não vão chegar mais eventos com timestamp anterior a T" - que é o que permite a um operador de janela decidir que uma janela está completa e disparar seu resultado. É uma afirmação que o job faz sobre os dados com base numa estratégia configurada, não uma medição direta, então uma estratégia agressiva demais pode afirmar completude antes que os dados reais, ainda a caminho, realmente apareçam.
Para onde realmente vão os eventos atrasados
Por padrão, um evento que chega depois que sua janela já disparou é simplesmente descartado - sem erro, sem linha de log. O allowedLateness mantém o estado de uma janela aberto por um período extra configurado especificamente para incorporar eventos atrasados como esse de volta, atualizando o resultado em vez de descartá-lo.
O side-output que você provavelmente não tem
Mesmo com allowedLateness configurado, um evento que chega depois que essa janela estendida finalmente fecha ainda é descartado. Direcioná-lo para um stream .sideOutputLateData() em vez disso - mesmo que só para contar e alertar sobre o volume - geralmente é a única forma de descobrir de fato o quanto disso está acontecendo, já que nada na saída do pipeline principal vai te contar.
Veja como isso fica no seu próprio pipeline.
Envie um event log real do Spark, um run_results.json do dbt ou uma exportação de métricas do Flink e receba recomendações concretas, para aprovar antes de aplicar - não mais uma regra geral.