Manual de Apache Airflow
Apache Airflow es una plataforma para orquestar workflows. No procesa datos por si mismo como Spark ni almacena datos como PostgreSQL o Snowflake; coordina tareas, dependencias, horarios, reintentos, alertas y ejecuciones.
Su unidad principal es el DAG, un grafo aciclico dirigido que describe que tareas existen y en que orden deben ejecutarse.
Capitulos previstos
- Introduccion y arquitectura
- DAGs tareas y operadores
- Scheduling
- XComs variables y conexiones
- Sensors y deferrable operators
- Testing de DAGs
- Despliegue
- Observabilidad y buenas practicas
- Arquitectura interna
- DAGs dinamicos y TaskFlow avanzado
- Airflow en produccion
- Patrones de pipelines de datos
- CI/CD para DAGs
- Proyecto final
Componentes principales
- DAG: definicion del workflow.
- Task: unidad de trabajo.
- Operator: plantilla para crear tareas.
- Scheduler: decide que tareas deben ejecutarse y cuando.
- Executor: define como se ejecutan las tareas.
- Worker: proceso que ejecuta tareas en ciertos executors.
- Metadata database: base donde Airflow guarda estado, historico y configuracion.
- Webserver: interfaz para ver DAGs, logs y ejecuciones.
Arquitectura conceptual
txt
DAG files
|
v
Scheduler -> Metadata DB <- Webserver
|
v
Executor -> Workers -> sistemas externosAirflow suele llamar a otros sistemas: Spark, dbt, APIs, scripts Python, comandos Bash, Snowflake, BigQuery, Kubernetes o servicios cloud.
Primer DAG
python
from datetime import datetime
from airflow.decorators import dag, task
@dag(
dag_id="hello_airflow",
start_date=datetime(2026, 1, 1),
schedule="@daily",
catchup=False,
tags=["learning"],
)
def hello_airflow():
@task
def extract():
return {"rows": 100}
@task
def transform(payload: dict):
return payload["rows"] * 2
@task
def load(total_rows: int):
print(f"Rows processed: {total_rows}")
load(transform(extract()))
hello_airflow()Cuando usar Airflow
- Pipelines batch con dependencias claras.
- Procesos diarios, horarios o bajo demanda.
- Coordinacion entre varios sistemas.
- Reintentos y alertas ante fallos.
- Auditoria de ejecuciones.
Cuando no usar Airflow
- Procesamiento en tiempo real de baja latencia.
- Tareas que deberian vivir dentro de una aplicacion transaccional.
- Logica de negocio que no es orquestacion.
- Procesos muy simples que basta ejecutar con cron.
Buenas practicas
- Mantener los DAGs declarativos y legibles.
- Evitar trabajo pesado en tiempo de parseo del DAG.
- Hacer tareas idempotentes.
- Definir
retries,retry_delayy alertas. - No pasar datos grandes por XCom.
- Versionar conexiones y variables fuera del codigo cuando contengan secretos.
Errores comunes
- Confundir Airflow con un motor de procesamiento.
- Hacer llamadas a APIs o bases de datos al importar el archivo del DAG.
- Crear DAGs enormes y dificiles de depurar.
- Depender de orden implicito en vez de dependencias explicitas.
- Usar
catchup=Truesin entender que ejecutara periodos pasados.
Ejercicio
Disena un DAG para cargar ventas diarias:
- Extraer archivo CSV desde una carpeta.
- Validar columnas obligatorias.
- Cargar datos en una tabla
raw. - Ejecutar transformacion a una tabla
marts. - Enviar alerta si falla la validacion.
