Flink
Nivel medio¿Por qué mi job de Flink descarta en silencio eventos que llegan tarde?
Un watermark es la propia afirmación de Flink de que no llegarán más eventos anteriores a cierto momento - no una medición. Uno demasiado agresivo cierra una ventana antes de que lleguen datos reales, sin ningún error.
Un evento que llega después de que su ventana ya disparó no da error, no se registra y no reintenta - simplemente desaparece, y el resultado de la ventana queda en silencio por debajo del conteo real.
Qué afirma realmente un watermark
Un watermark es la propia afirmación de Flink - "no llegarán más eventos con timestamp anterior a T" - que es lo que permite a un operador de ventana decidir que una ventana está completa y emitir su resultado. Es una afirmación que el job hace sobre los datos según una estrategia configurada, no una medición directa, así que una estrategia demasiado agresiva puede afirmar completitud antes de que los datos reales, todavía en camino, lleguen de verdad.
A dónde van realmente los eventos tardíos
Por defecto, un evento que llega después de que su ventana ya disparó simplemente se descarta - sin error, sin línea de log. allowedLateness mantiene el estado de una ventana abierto por un período extra configurado específicamente para incorporar eventos tardíos como este de vuelta, actualizando el resultado en vez de descartarlo.
El side-output que probablemente no tiene
Incluso con allowedLateness configurado, un evento que llega después de que esa ventana extendida finalmente cierra sigue descartándose. Enrutarlo en su lugar a un stream .sideOutputLateData() - aunque solo sea para contar y alertar sobre el volumen - suele ser la única forma de enterarse realmente de cuánto de esto está pasando, ya que nada en la salida del pipeline principal se lo dirá.
Vea cómo se ve esto en su propio pipeline.
Suba un event log real de Spark, un run_results.json de dbt o una exportación de métricas de Flink y obtenga recomendaciones concretas, que debe aprobar antes de aplicar - no otra regla general.