Errores, Checkpoints y recuperación en Lakeflow
Objetivo: saber qué hacer cuando falla un pipeline, cuándo basta con reiniciarlo y por qué un Full Refresh puede provocar pérdida de datos.
1. ¿Qué guarda realmente un checkpoint?
Un checkpoint no es únicamente el último offset de Kafka. Puede almacenar tres tipos de información:
Progreso: hasta qué offset o versión se ha procesado.
Estado: información de agregaciones, joins y deduplicación.
Metadatos: información necesaria para recuperar la ejecución.
Lakeflow administra estos checkpoints internamente para cada flow de streaming. Databricks on AWS
Kafka · offsets 1–1000
Lakeflow Streaming Flow
Último lote confirmado: offset 800Bronze
Datos confirmadosCheckpoint
Progreso y estadoSupongamos que el pipeline falla procesando los offsets 801–900.
Al reiniciarlo, Lakeflow puede recuperar el último estado confirmado y reintentar el lote fallido sin duplicar sus efectos en la tabla gestionada.
Esto es posible gracias a la combinación de checkpoints, recuperación de Spark y escrituras transaccionales. No significa que cualquier operación externa —por ejemplo, llamar a una API— tenga automáticamente garantías exactly-once. Databricks on AWS
2. Cuatro incidentes de producción
Caso A. Event Hubs deja de responder durante 2 minutos
Normalmente basta con reintentar cuando se recupera la conexión. Se continúa desde el checkpoint, siempre que los eventos sigan disponibles.
Caso B. Un ticket incumple expect_or_fail
Hay que corregir la regla, el dato o introducir una cuarentena. Reiniciar sin resolver la causa probablemente reproducirá el mismo error.
Caso C. Modificamos una agregación streaming con estado
Cambiar las claves de agrupación puede volver incompatible el checkpoint anterior. Un reintento normal no lo soluciona; necesitamos planificar cómo reconstruir el estado.
Caso D. Se elimina o corrompe el checkpoint
No debemos lanzar un Full Refresh automáticamente. Primero hay que comprobar si conservamos todo el histórico y evaluar las opciones de recuperación.
Databricks documenta distintas alternativas de recuperación, como Full Refresh, reconstrucción con backup/backfill y reset selectivo de checkpoints. Databricks on AWS
3. Full Refresh: ¿qué hace exactamente?
Comparemos las operaciones.
Operación | Datos existentes | Checkpoints |
|---|---|---|
Refresh normal | Conservados y actualizados | Conservados |
Full Refresh de Streaming Table | Se eliminan y reconstruyen | Se reinician |
Reset de checkpoint | Se conservan | Se reinician |
En una Materialized View, Full Refresh recalcula el resultado completo.
Un reset de checkpoint no es equivalente a un Full Refresh: conservar datos y volver a procesar eventos puede crear duplicados si la operación no es idempotente. Databricks on AWS
4. Experimento: el peligro de Kafka con retención corta
Imagina esta situación:
Event Hubs conserva los eventos durante 24 horas.
Bronze tiene 30 días de histórico.
Lanzas Full Refresh sobre Bronze.
¿Qué sucedería con el histórico?
Refresh normal
Full Refresh
Histórico Bronze después de ejecutar
1 día
DisponibleNo recuperable desde Kafka
Riesgo de pérdida de histórico
La tabla se vacía y se reconstruye con los mensajes que todavía existen en Kafka. Los 29 días anteriores no pueden recuperarse desde esa fuente.Por eso, en una arquitectura con Kafka, Bronze debería diseñarse para no necesitar Full Refresh habitual. Es más seguro mantener el histórico raw en Delta y reconstruir Silver desde ese histórico cuando sea necesario. Databricks on AWS
5. Práctica: diagnosticar un pipeline fallido
Cuando falle un pipeline, sigue este procedimiento:
Abre Jobs & Pipelines y selecciona la ejecución fallida.
Consulta Issues, el DAG y el mensaje de error del flow afectado.
- Identifica si el problema es transitorio, de calidad, de código o del checkpoint.
Corrige la causa y utiliza Validate cuando sea un cambio de código o configuración.
Utiliza Refresh failed tables si corresponde. Reserva Full Refresh para los casos que realmente lo requieren.
Databricks permite reejecutar únicamente las tablas fallidas y sus dependientes, evitando reprocesar todo el pipeline. Databricks on AWS
Consultar errores con SQL
SELECT
timestamp,
event_type,
message,
error
FROM event_log('<pipeline-id>')
WHERE level = 'ERROR'
ORDER BY timestamp DESC
LIMIT 20;Esto te permite investigar el error con mayor detalle que el mensaje resumido de la interfaz.
6. Un concepto avanzado: Rewind
Databricks dispone también de Pipeline Rewind, actualmente una funcionalidad Beta con requisitos específicos.
Permite volver a un punto anterior y reprocesar datos preservando la coherencia entre tablas, offsets y estado, en los casos compatibles.
Pero no sirve para solucionar checkpoints corruptos o cambios incompatibles en operadores con estado. Databricks on AWS
Lo estudiaremos en profundidad más adelante; por ahora, quédate con que Rewind y Full Refresh son operaciones diferentes.
7. Mini ejercicio: incidente real
Tienes un pipeline Bronze que consume Event Hubs.
La retención de Event Hubs es de 24 horas.
Bronze conserva 6 meses de datos.
El pipeline falla por un problema temporal de conectividad.
Los checkpoints siguen intactos.
¿Qué harías primero?
¡Correcto!
Conservamos los datos y el checkpoint. Si los eventos pendientes siguen dentro de la retención de Event Hubs, el pipeline podrá continuar procesándolos normalmente.Qué debes recordar:
Los checkpoints permiten recuperar una ejecución sin empezar desde cero.
Los errores transitorios normalmente requieren reintentos, no Full Refresh.
Los cambios incompatibles de estado necesitan una recuperación planificada.
Nunca reconstruyas Bronze desde Kafka sin verificar primero la retención y la posibilidad de recuperar el histórico.
Próxima lección: desplegaremos Lakeflow como código utilizando Databricks Asset Bundles y Unity Catalog, pasando el mismo pipeline por DEV, UAT y PROD.
Una idea más en tu cuaderno.
Marca esta lección cuando hayas terminado de repasarla.
Material importado del curso original. Simulaciones conservadas como ejemplos estáticos; para sus controles interactivos, consulta el original.