Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Cette page fournit des étapes de dépannage et des informations sur les problèmes courants liés au déclencheur Airflow.
Opérations de blocage dans le déclencheur
Il arrive que des tâches asynchrones soient bloquées dans les déclencheurs. Dans la plupart des cas, les problèmes proviennent de ressources de déclencheur insuffisantes ou de problèmes liés au code d'opérateur asynchrone personnalisé.
Les journaux de déclencheurs affichent les messages d'avertissement qui peuvent vous aider à identifier les causes racines de la baisse des performances des déclencheurs. Deux avertissements importants sont à surveiller.
Fil asynchrone bloqué
Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.
Cet avertissement signale des problèmes de performances dus à un volume élevé de tâches asynchrones.
Solution : Pour résoudre ce problème, allouez plus de ressources aux déclencheurs, réduisez le nombre de tâches différées exécutées en même temps ou augmentez le nombre de déclencheurs dans votre environnement. N'oubliez pas que même si les déclencheurs gèrent les tâches différables, ce sont les nœuds de calcul qui sont responsables du démarrage et de l'exécution de chaque tâche. Si vous ajustez le nombre de déclencheurs, pensez également à mettre à l'échelle le nombre de vos instances de nœuds de calcul.
Une tâche spécifique a bloqué le thread asynchrone.
WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/my-custom-code.py:609> result=None> took 0.401 second
Cet avertissement pointe vers un élément spécifique du code de l'opérateur exécuté par Cloud Composer. Par conception, les déclencheurs doivent s'appuyer sur la bibliothèque
asyncio
pour exécuter des opérations en arrière-plan. Une implémentation personnalisée d'un déclencheur peut ne pas respecter correctement les contratsasyncio
(par exemple, en raison d'une utilisation incorrecte des mots clésawait
etasync
dans le code Python).Solution : Inspectez le code signalé par l'avertissement et vérifiez si l'opération asynchrone est correctement implémentée.
Trop de déclencheurs
Le nombre de tâches différées est visible dans la métrique task_count
, qui s'affiche également dans le tableau de bord "Surveillance" de votre environnement. Chaque déclencheur crée des ressources telles que des connexions à des ressources externes, qui consomment de la mémoire.

Les graphiques de consommation de mémoire et de processeur indiquent que des ressources insuffisantes entraînent des redémarrages, car la vérification de l'activité échoue en raison de l'absence de signaux de présence :

Solution : Pour résoudre ce problème, allouez plus de ressources aux déclencheurs, réduisez le nombre de tâches différées exécutées en même temps ou augmentez le nombre de déclencheurs dans votre environnement.
Plantage d'un nœud de calcul Airflow lors de l'exécution du rappel
Une fois l'exécution du déclencheur terminée, le contrôle revient à un nœud de calcul Airflow, qui exécute une méthode de rappel à l'aide d'un emplacement d'exécution. Cette phase est contrôlée par l'exécuteur Celery. Par conséquent, la configuration et les limites de ressources correspondantes s'appliquent (par exemple, parallelism
ou worker_concurrency
).
Si la méthode de rappel échoue dans le nœud de calcul Airflow, si le nœud de calcul échoue ou si le nœud de calcul qui exécute la méthode redémarre, la tâche est marquée comme FAILED
. Dans ce cas, l'opération de nouvelle tentative réexécute l'intégralité de la tâche, et pas seulement la méthode de rappel.
Boucle infinie dans un déclencheur
Il est possible d'implémenter un opérateur de déclencheur personnalisé de manière à bloquer entièrement la boucle de déclencheur principale, de sorte que seul le déclencheur défectueux soit exécuté à ce moment-là. Dans ce cas, un avertissement est généré dans les journaux du déclencheur une fois le déclencheur problématique terminé.
Classe de déclencheur introuvable
Étant donné que le dossier DAG n'est pas synchronisé avec le déclencheur Airflow, le code de déclencheur intégré est manquant lorsque le déclencheur est exécuté. L'erreur est générée dans les journaux de la tâche ayant échoué :
ImportError: Module "PACKAGE_NAME" does not define a "CLASS_NAME" attribute/
class
Solution : importez le code manquant depuis PyPI.
Message d'avertissement concernant le déclencheur dans l'UI d'Airflow
Dans certains cas, après la désactivation du déclencheur, le message d'avertissement suivant peut s'afficher dans l'interface utilisateur Airflow :
The triggerer does not appear to be running. Last heartbeat was received
4 hours ago. Triggers will not run, and any deferred operator will remain
deferred until it times out or fails.
Ce message peut s'afficher dans Airflow, car des déclencheurs incomplets sont toujours présents dans la base de données Airflow. Ce message signifie généralement que le déclencheur a été désactivé avant que tous les déclencheurs n'aient été exécutés dans votre environnement.
Pour afficher tous les déclencheurs en cours d'exécution dans l'environnement, consultez la page Parcourir > Déclencheurs de l'interface utilisateur Airflow (le rôle Admin
est requis).
Solutions :
- Réactivez le déclencheur et attendez que les tâches différées soient terminées.
- Accédez à la base de données Airflow et supprimez manuellement les déclencheurs incomplets.
Les tâches restent à l'état différé après la désactivation du déclencheur
Lorsque le déclencheur est désactivé, les tâches déjà à l'état différé le restent jusqu'à ce que le délai avant expiration soit atteint. Ce délai avant expiration peut être infini, en fonction de la configuration d'Airflow et du DAG.
Utilisez l'une des solutions suivantes :
- Marquez manuellement les tâches comme ayant échoué.
- Autorisez le déclencheur à effectuer les tâches.
Nous vous recommandons de désactiver le déclencheur uniquement si votre environnement n'exécute aucun opérateur ni aucune tâche différés, et si toutes les tâches différées sont terminées.