← Retour au blog

Orchestration Airflow, Prefect ou Dagster

Lucian BLETAN

Le débat pour savoir quel est le “meilleur” orchestrateur de données est souvent une distraction. Airflow, Prefect, Dagster… l’outil est moins important que la manière dont vous l’utilisez. Un pipeline bien conçu sur un outil simple sera toujours supérieur à un pipeline chaotique sur l’outil le plus à la mode. Le vrai enjeu est d’appliquer des principes de développement logiciel solides à vos workflows de données : des conventions claires, des tests automatisés et une bonne observabilité.

ce qui compte vraiment

Le succès de votre orchestration ne dépend pas de l’outil, mais des principes que vous appliquez.

ce qui compte moins

ce qui compte vraiment

influence

principes de dev

conventions d'équipe

observabilité

le choix de l'outil

dags fiables

prérequis

  • Des DAGs de référence qui servent de modèles pour les nouveaux pipelines.
  • Des environnements reproductibles (Docker) pour garantir que les tâches s’exécutent de la même manière en local et en production.
  • Une supervision de base (logs, alertes) pour savoir quand un job échoue.

idées clefs

Quel que soit l’outil, les principes d’un DAG fiable sont universels.

principes d'un dag fiable

idempotence

une tâche peut être relancée sans effet de bord

tâches courtes & composées

chaque tâche fait une seule chose bien

secrets hors du code

utilisation d'un secret backend

dépendances explicites

pas de "magie" entre les tâches

pas à pas

étape 1: un patron de tâche solide

Chaque tâche de vos DAGs doit être une fonction simple, testable et idempotente. Elle ne doit faire qu’une seule chose.

Mauvais exemple : une tâche géante et fragile

tâche monolithique (extraire + transformer + charger + notifier)

Bon exemple : des tâches courtes et composées

extraire

transformer

charger

notifier

étape 2: des tests simples mais efficaces

Testez la logique de vos tâches en dehors de l’orchestrateur. Vous devez pouvoir valider le comportement d’une tâche sans avoir à lancer un DAG complet.

# test_tasks.py
# Un test simple qui ne dépend pas d'Airflow ou de Prefect

from my_project.tasks import process_data

def test_process_data_with_valid_input():
    # GIVEN un dataframe de test
    input_df = ...
    # WHEN on appelle la fonction
    output_df = process_data(input_df)
    # THEN le résultat est conforme aux attentes
    assert output_df is not None
    assert "processed_column" in output_df.columns

étape 3: une observabilité de base

Vous devez pouvoir répondre rapidement à ces questions : “Qu’est-ce qui a tourné ?”, “Qu’est-ce qui a échoué ?” et “Combien de temps ça a pris ?”. Une simple requête sur les métadonnées de l’orchestrateur suffit.

-- Suivre les 50 dernières exécutions de DAGs
SELECT
    dag_id,
    state,
    start_date,
    end_date,
    duration -- en secondes
FROM
    airflow_metastore.dag_run
ORDER BY
    start_date DESC
LIMIT 50;

pièges frequents

  • Symptôme: Un DAG échoue au milieu d’une exécution de 2 heures, et il faut tout relancer depuis le début.

    • Cause: Tâches géantes et non idempotentes.
    • Correctif: Découper le DAG en petites tâches atomiques. Chaque tâche doit pouvoir être relancée indépendamment.
  • Symptôme: Un DAG échoue car il dépend d’un fichier qu’un autre DAG est censé produire, mais ce n’est pas explicite.

    • Cause: Dépendances implicites entre les DAGs.
    • Correctif: Déclarer les dépendances. Utilisez des capteurs (sensors) ou des datasets pour qu’un DAG attende explicitement la fin d’un autre.
  • Symptôme: Un DAG échoue, mais les logs sont introuvables ou noyés dans la masse.

    • Cause: Pas de centralisation des logs.
    • Correctif: Configurer l’orchestrateur pour qu’il envoie tous les logs vers un système centralisé (ex: Datadog, ELK, CloudWatch).

faq

  • Airflow est-il dépassé ? Non. Airflow est mature, robuste et dispose de l’écosystème le plus large. Sa complexité est souvent surestimée. Pour de nombreuses équipes, il reste le choix par défaut le plus sûr.

  • Quand devrais-je considérer Prefect ou Dagster ?

    • Prefect est une excellente option si vous privilégiez une expérience “Python-native” et une interface utilisateur plus moderne. Son modèle de passage de données entre les tâches est souvent plus intuitif.
    • Dagster est intéressant si vous adoptez une approche “data-aware”. Il est conçu autour du concept d’actifs de données (assets) et de leur lignage, ce qui le rend puissant pour les équipes qui pensent “produit de données”.