En el mundo de la ingeniería de datos, gestionar pipelines complejos con múltiples dependencias y schedules es uno de los mayores desafíos. Apache Airflow nació para resolver este problema y se ha convertido en el estándar de facto para la orquestación de flujos de trabajo de datos, siendo adoptado por miles de organizaciones en todo el mundo, desde startups hasta empresas Fortune 500. Su capacidad para definir, programar y monitorizar flujos de trabajo de datos complejos ha revolucionado la forma en que los equipos de datos gestionan sus procesos, permitiendo una mayor fiabilidad, visibilidad y control sobre los pipelines de datos.
Fue creado originalmente en Airbnb en 2014 por Maxime Beauchemin, ingeniero de datos de la compañía, para resolver los problemas de orquestación que enfrentaba la empresa con sus crecientes flujos de datos. La necesidad de gestionar dependencias complejas entre tareas, programar ejecuciones y monitorizar el estado de los procesos llevó al desarrollo de una herramienta que hoy es uno de los proyectos más activos y utilizados del ecosistema de datos. En 2016, Airflow fue donado a la Apache Foundation, donde ha seguido evolucionando con contribuciones de una comunidad global de desarrolladores y empresas.
Los flujos de trabajo en Airflow se definen como DAGs (Directed Acyclic Graphs) escritos en Python, lo que significa que todo el código está versionado, se puede revisar en PRs (Pull Requests) y se pueden aplicar prácticas de ingeniería de software como testing, CI/CD y code reviews. Esta aproximación "infrastructure as code" (infraestructura como código) permite a los equipos de datos aplicar las mismas metodologías de desarrollo que los equipos de software, mejorando la calidad, la mantenibilidad y la colaboración en los proyectos de datos. La elección de Python como lenguaje de definición fue estratégica, ya que es uno de los lenguajes más utilizados en el ecosistema de datos, facilitando la adopción y la integración con otras herramientas.
Airflow tiene una arquitectura distribuida con varios componentes clave que trabajan juntos para orquestar flujos de trabajo a escala. El Scheduler es el cerebro de Airflow, un proceso que constantemente escanea los DAGs, evalúa sus dependencias y programaciones, y dispara las tareas cuando las condiciones se cumplen. El Scheduler es responsable de la toma de decisiones sobre qué tareas ejecutar y cuándo, optimizando el uso de recursos y garantizando que las dependencias se respeten. El Worker ejecuta las tareas programadas, y se pueden tener múltiples workers para escalar horizontalmente, procesando tareas en paralelo y distribuyendo la carga de trabajo. Los workers pueden ejecutarse en diferentes máquinas o contenedores, permitiendo una escalabilidad elástica según la demanda.
La Web UI es la interfaz gráfica de Airflow, una aplicación web que ofrece una vista completa y detallada de todos los DAGs, tareas, ejecuciones y logs. La Web UI permite a los equipos monitorizar el estado de los flujos de trabajo, identificar fallos, inspeccionar logs, y gestionar manualmente ejecuciones (triggering, pausa, cancelación de tareas). La interfaz proporciona una visibilidad sin precedentes sobre los pipelines de datos, facilitando la resolución de problemas y la gestión operativa. La Metadata Database es el almacenamiento persistente que guarda el estado de todos los DAGs, tareas, ejecuciones, variables y conexiones. Generalmente se utiliza PostgreSQL o MySQL como base de datos de metadatos, y su elección es crítica para el rendimiento y la fiabilidad de Airflow en producción. El Executor es el componente que define cómo se ejecutan las tareas, con opciones como LocalExecutor (para entornos de desarrollo y pruebas), CeleryExecutor (para entornos distribuidos con múltiples workers) y KubernetesExecutor (para entornos nativos en la nube que ejecutan cada tarea en un pod de Kubernetes). La elección del executor adecuado depende del tamaño y la complejidad de la infraestructura de datos de la organización.
Los conceptos fundamentales de Airflow son la base de su modelo de orquestación. El DAG (Directed Acyclic Graph) es un grafo acíclico dirigido que representa tu flujo de trabajo completo. Un DAG define qué tareas hay, en qué orden se ejecutan y qué dependencias existen entre ellas. Los DAGs se definen en archivos Python que se colocan en el directorio de DAGs de Airflow, y el Scheduler los carga periódicamente para evaluar su estado y programar ejecuciones. La naturaleza acíclica del grafo garantiza que no haya dependencias circulares, lo que simplifica la gestión y evita problemas de deadlock. Una Task (tarea) es una unidad de trabajo dentro de un DAG, que puede ser ejecutar un script Python, una consulta SQL, un comando Bash, transferir un archivo, o esperar a que un archivo aparezca en S3. Las tareas son los nodos del DAG y representan cada paso individual en el flujo de trabajo.
Los Operators son el mecanismo en Airflow que define qué hace exactamente una tarea. Airflow proporciona decenas de operadores predefinidos que cubren la mayoría de los casos de uso comunes en la ingeniería de datos. El PythonOperator ejecuta una función Python, permitiendo una flexibilidad casi ilimitada para implementar lógica personalizada. El BashOperator ejecuta un comando Bash, ideal para scripts shell y comandos del sistema. El SQLOperator ejecuta una consulta SQL en una base de datos, soportando múltiples motores como PostgreSQL, MySQL, Snowflake, BigQuery, Redshift, entre otros. El EmailOperator envía un email, útil para notificaciones y alertas. Los Sensors son operadores especiales que esperan a que se cumpla una condición (como la llegada de un archivo a S3, la disponibilidad de una tabla en SQL, o el éxito de una ejecución externa) antes de continuar con el flujo de trabajo. El DummyOperator es una tarea vacía que no hace nada, útil para estructurar el DAG y agrupar tareas lógicamente. Los operadores pueden extenderse y personalizarse, permitiendo a los equipos crear operadores específicos para sus necesidades particulares.
Los XComs (Cross-Communication) son el mecanismo que permite intercambiar datos entre tareas dentro de un mismo DAG. Una tarea puede enviar un dato (XCom push) y otra tarea puede recibirlo (XCom pull), permitiendo que las tareas compartan información y resultados intermedios. Los XComs son especialmente útiles para pasar parámetros entre tareas, como la ruta de un archivo generado por una tarea y consumido por otra, o los resultados de una consulta SQL que se utilizan en una tarea posterior. Los XComs se almacenan en la Metadata Database, y su uso debe ser moderado para no sobrecargar la base de datos con grandes volúmenes de datos. Para intercambios de datos más grandes, es recomendable utilizar sistemas de almacenamiento externos como S3 o GCS.
Un ejemplo de DAG completo en Airflow comienza importando las librerías necesarias desde airflow y datetime, definiendo argumentos por defecto como el propietario (owner), la fecha de inicio (start_date), el número de reintentos (retries) y el intervalo entre reintentos (retry_delay). Luego se instancia el DAG con un ID único, los argumentos por defecto, el intervalo de programación (schedule_interval) que define cada cuándo se ejecuta el DAG, y las políticas de reintento y catchup. Finalmente, se definen las tareas utilizando los operadores correspondientes y se establecen las dependencias entre ellas con el operador de bits >> para indicar el orden de ejecución. Por ejemplo, task1 >> task2 >> task3 define que task1 debe ejecutarse antes que task2, y task2 antes que task3. Este enfoque declarativo hace que los DAGs sean fáciles de leer y mantener, incluso para flujos de trabajo complejos con múltiples tareas y dependencias.
Airflow también ofrece características avanzadas como Dynamic DAGs, que permiten generar DAGs dinámicamente a partir de configuraciones o datos externos; SubDAGs para agrupar tareas y reutilizar lógica; TaskGroups para organizar visualmente las tareas en grupos en la Web UI; Pools para limitar el número de tareas concurrentes y gestionar recursos; SLAs (Service Level Agreements) para definir expectativas de tiempo de finalización y recibir alertas cuando no se cumplen; y Triggers para iniciar DAGs basados en eventos externos. Estas características hacen de Airflow una herramienta extremadamente flexible y poderosa para la orquestación de datos en entornos empresariales.
Airflow se integra con una amplia gama de herramientas y plataformas del ecosistema de datos, incluyendo Apache Spark, Apache Kafka, AWS (S3, EMR, Redshift, Glue), Google Cloud (BigQuery, GCS, Dataflow), Azure (Data Lake, Synapse), Snowflake, Databricks, y muchas más. Esta integrabilidad lo convierte en el centro de control de la mayoría de las arquitecturas de datos modernas, permitiendo orquestar flujos de trabajo que abarcan múltiples sistemas y plataformas.
La comunidad de Airflow es una de las más activas en el ecosistema de datos, con contribuciones constantes de empresas y desarrolladores de todo el mundo. La herramienta está en continua evolución, con nuevas características y mejoras que se añaden en cada versión. La documentación oficial es extensa y detallada, y existen numerosos recursos, tutoriales y cursos para aprender a utilizar Airflow de manera efectiva.
En Curaduriadedatos.com, ayudamos a organizaciones a implementar y optimizar sus pipelines de datos con Apache Airflow, proporcionando asesoramiento en diseño de DAGs, configuración de infraestructura, y mejores prácticas para la orquestación de datos a escala.