Dans toute entreprise axée sur la donnée, le cycle de vie de l'information implique une multitude d'opérations hétérogènes : extraire des logs d'un serveur web, interroger une API financière, charger des tables dans un entrepôt de données (Data Warehouse), exécuter des transformations SQL lourdes et entraîner des modèles de Machine Learning.
Lorsque ces tâches étaient gérées par de simples scripts cron Linux disparates, les équipes de Data Engineering étaient confrontées à un cauchemar opérationnel : comment relancer automatiquement une tâche en cas d'échec ? Comment s'assurer qu'une transformation ne démarre pas avant la fin de l'extraction ? Comment auditer les temps d'exécution et recevoir des alertes en temps réel ?
C'est précisément pour résoudre ces défis qu'Apache Airflow s'est imposé comme le standard mondial de l'orchestration de flux de données (Data Orchestration).
flowchart LR
subgraph Sources["Sources de Données"]
S1["Bases OLTP<br><i>PostgreSQL, MySQL</i>"]
S2["APIs Externes<br><i>REST, GraphQL</i>"]
S3["Fichiers Plats<br><i>CSV, Parquet, JSON</i>"]
end
subgraph Airflow["Moteur Apache Airflow"]
ORCH["<b>Orchestrateur Airflow</b><br>Planification Cron / Datasets<br>Gestion des Dépendances<br>Monitoring & Alerting"]
end
subgraph Cibles["Destinations & Consommation"]
W1["Data Lakehouse<br><i>S3, GCS, Delta Lake</i>"]
W2["Data Warehouse<br><i>Snowflake, BigQuery</i>"]
W3["BI & Rapports<br><i>Power BI, Tableau</i>"]
end
Sources -->|Ingestion pilotée| Airflow
Airflow -->|Transformation & Chargement| Cibles
style Sources fill:#f1f5f9,stroke:#64748b
style Airflow fill:#e0f2fe,stroke:#0284c7,stroke-width:2px,color:#0f172a
style Cibles fill:#dcfce7,stroke:#16a34a,color:#0f172a
1. Qu'est-ce qu'Apache Airflow ?#
Créé au sein d'Airbnb en octobre 2014 par Maxime Beauchemin pour orchestrer leurs pipelines internes, Airflow a rejoint l'incubateur de la Fondation Apache en 2016 avant de devenir un projet Top-Level en 2019.
Airflow est une plateforme open-source permettant de rédiger, planifier et superviser des flux de travail sous forme de code Python pur (Configuration as Code).
Les atouts décisifs d'Airflow#
- Tout en code (Code-as-Configuration) : Vos pipelines de données sont des programmes Python versionnés dans Git, testables unitairement et déployables par intégration continue (CI/CD).
- Interface web riche : Visualisation en temps réel de l'état d'avancement des tâches, inspection des journaux de logs d'un simple clic et relance sélective des étapes échouées.
- Écosystème de connecteurs (Providers) : Plus de 80 connecteurs officiels pour interagir sans effort avec AWS, Google Cloud, Azure, Snowflake, Databricks, PostgreSQL, Docker et Kubernetes.
- Résilience et tolérance aux pannes : Stratégies de réessais automatiques (retries), alertes e-mail/Slack en cas d'incident et gestion des accords de niveau de service (SLA).
[!NOTE] Airflow n'est PAS un moteur de traitement de données : Airflow n'est pas conçu pour faire transiter des gigaoctets de données dans sa propre mémoire (comme le feraient Apache Spark ou Pandas). Airflow est un chef d'orchestre : il donne l'ordre à Spark de lancer un cluster, ordonne à Snowflake d'exécuter une requête SQL, ou ordonne à Docker de lancer un conteneur d'ingestion.
2. L'architecture interne d'Apache Airflow#
Un déploiement d'Apache Airflow repose sur plusieurs services modulaires et interconnectés :
flowchart TD
subgraph Controle["Plan de Contrôle"]
WEB["<b>Web Server</b><br>Interface utilisateur Flask & API REST"]
SCHED["<b>Scheduler</b><br>Ordonnanceur & Analyseur de DAGs"]
TRIG["<b>Triggerer</b><br>Gestion asynchrone des Sensors"]
end
subgraph Stockage["Persistance & Messagerie"]
META["<b>Base de Métadonnées</b><br>PostgreSQL / MySQL"]
BROKER["<b>Queue de Messagerie</b><br>Redis / RabbitMQ (Celery)"]
end
subgraph Execution["Plan d'Exécution"]
W1["<b>Worker 1</b><br>Exécution des tâches"]
W2["<b>Worker 2</b><br>Exécution des tâches"]
end
SCHED <--> META
WEB <--> META
SCHED -->|Publie les tâches prêtes| BROKER
BROKER -->|Distribue les tâches| W1
BROKER -->|Distribue les tâches| W2
W1 <--> META
W2 <--> META
TRIG <--> META
style Controle fill:#e0f2fe,stroke:#0284c7,stroke-width:2px,color:#0f172a
style Stockage fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#0f172a
style Execution fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#0f172a
| Composant | Rôle technique | Conteneur Docker associé |
|---|---|---|
| Scheduler | Le cœur battant du système. Il scanne le dossier dags/, vérifie les intervalles de planification et soumet les tâches éligibles à l'exécuteur. |
airflow-scheduler |
| Webserver | L'interface graphique web (port 8080) permettant aux ingénieurs et analystes de suivre les flux et de gérer les secrets. | airflow-webserver |
| Base de métadonnées | Base relationnelle (PostgreSQL recommandé) stockant l'état des exécutions, l'historique, les connexions et les variables. | postgres |
| Triggerer | Décharge les workers en gérant les tâches d'attente (Sensors déférents) de manière asynchrone non-bloquante. | airflow-triggerer |
| Workers | Processus qui exécutent concrètement le code des tâches (dans une architecture Celery ou Kubernetes). | airflow-worker |
| Redis | File de messages temporaire utilisée par l'exécuteur Celery pour distribuer le travail aux différents workers. | redis |
3. Le concept fondamental : Le DAG#
Dans Airflow, un flux de travail est modélisé sous la forme d'un DAG (Directed Acyclic Graph / Graphe Acyclique Dirigé) : - Dirigé (Directed) : Les tâches s'enchaînent selon un ordre et un sens d'exécution strictement définis. - Acyclique (Acyclic) : Le graphe ne peut comporter aucune boucle infinie (une tâche ne peut pas dépendre d'elle-même, directement ou indirectement). - Graphe (Graph) : L'ensemble forme une structure mathématique de nœuds (les Tâches) reliés par des arêtes (les Dépendances).
graph LR
A["extract_sales<br><i>(Extraction API)</i>"] --> B["validate_schema<br><i>(Contrôle qualité)</i>"]
B --> C["transform_data<br><i>(Calcul des marges)</i>"]
B --> D["archive_raw_files<br><i>(Sauvegarde S3)</i>"]
C --> E["load_data_warehouse<br><i>(Upsert PostgreSQL)</i>"]
D --> F["notify_teams<br><i>(Alerte de succès)</i>"]
E --> F
style A fill:#f1f5f9,stroke:#475569
style B fill:#fef3c7,stroke:#d97706
style C fill:#e0f2fe,stroke:#0284c7
style D fill:#e0f2fe,stroke:#0284c7
style E fill:#dcfce7,stroke:#16a34a
style F fill:#dcfce7,stroke:#16a34a,stroke-width:2px
4. À quoi ressemble un pipeline Airflow 2.x ?#
Voici un exemple moderne, propre et conforme aux standards idiomatiques d'Airflow 2 :
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.empty import EmptyOperator
from airflow.operators.python import PythonOperator
from airflow.providers.common.sql.operators.sql import SQLExecuteQueryOperator
# Arguments par défaut hérités par toutes les tâches du DAG
default_args = {
"owner": "data_team",
"retries": 3,
"retry_delay": timedelta(minutes=5),
}
def extraire_donnees(**context):
"""Fonction Python exécutée par le PythonOperator."""
print("Extraction des données en cours...")
return 42
with DAG(
dag_id="pipeline_ventes_quotidien",
description="Extraction et consolidation quotidienne des ventes",
default_args=default_args,
start_date=datetime(2026, 1, 1),
schedule="0 6 * * *", # Tous les jours à 06h00 UTC
catchup=False,
tags=["production", "ventes", "etl"],
) as dag:
# 1. Tâche d'ancrage de début de flux
debut = EmptyOperator(task_id="debut")
# 2. Tâche Python d'extraction
extraction = PythonOperator(
task_id="extraire_donnees",
python_callable=extraire_donnees,
)
# 3. Tâche SQL exécutée sur la base PostgreSQL cible
chargement = SQLExecuteQueryOperator(
task_id="charger_datamart",
conn_id="postgres_dw",
sql="REFRESH MATERIALIZED VIEW mv_ventes_journalieres;",
)
# 4. Tâche de clôture
fin = EmptyOperator(task_id="fin")
# Définition de l'ordre d'enchaînement (Flux de dépendances)
debut >> extraction >> chargement >> fin
Programme de la formation#
Au cours de ce module dédié à Apache Airflow, vous allez maîtriser l'orchestration de bout en bout :
- Installer Airflow avec Docker Compose : Déployer un environnement de développement d'entreprise complet.
- Découvrir l'interface web : Naviguer dans les vues Grid, Graph, logs et gestionnaires de secrets.
- Créer votre premier pipeline ETL : Structurer des tâches avec les opérateurs classiques et la nouvelle API TaskFlow.
- Planifier avec précision : Comprendre le fonctionnement des expressions Cron, des intervalles de données (Data Intervals) et du Backfill.
- Gérer les dépendances avancées : Règles de déclenchement (Trigger Rules), capteurs (Sensors) et aiguillage dynamique (Branching).
- Maîtriser la CLI Airflow : Déboguer et tester des tâches en isolation sans impacter la production.
- Sécuriser et monitorer : Configurer les connexions aux bases de données et automatiser les alertes d'incident par e-mail ou webhook.
Prêt à monter en compétences sur l'orchestrateur le plus demandé du marché ? Rendez-vous dans la leçon suivante pour installer et lancer Apache Airflow sur votre machine !
Commentaires