Airflow administrado (3ª gen.) | Airflow administrado (2ª gen.) | Airflow administrado (1ª gen. heredada)
En esta página, se proporcionan información y pasos para solucionar problemas comunes con el activador de Airflow.
Bloqueo de operaciones en el activador
En ocasiones, las tareas asíncronas pueden bloquearse en los activadores. En la mayoría de los casos, los problemas provienen de recursos insuficientes del activador o de problemas con el código del operador asíncrono personalizado.
Los registros del activador muestran los mensajes de advertencia que pueden ayudarte a identificar las causas raíz de la disminución del rendimiento del activador. Hay dos advertencias importantes que debes buscar.
Async thread blocked:
Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.Esta advertencia indica problemas de rendimiento debido a un gran volumen de tareas asíncronas.
Solución: Para solucionar este problema, haz lo siguiente:
- Ajusta los parámetros del activador para asignar más recursos a los activadores o aumentar la cantidad de activadores en tu entorno.
- Reduce la cantidad de tareas diferidas que se ejecutan al mismo tiempo.
Aunque los activadores controlan las tareas diferibles, los trabajadores de Airflow son responsables de iniciar y, finalmente, completar cada tarea. Si estás ajustando la cantidad de activadores, considera también ajustar la cantidad de instancias de trabajador.
A specific task blocked the async thread:
WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/example.py:609> result=None> took 0.401 secondEsta advertencia apunta a una parte específica del código del operador que ejecuta Managed Service for Apache Airflow. Por diseño, los activadores dependen de la biblioteca
asynciopara ejecutar operaciones en segundo plano. Una implementación personalizada de un activador puede no cumplir correctamente con los contratosasyncio(por ejemplo, debido al uso incorrecto de las palabras claveawaityasyncen el código de Python).Solución: Inspecciona el código que informa la advertencia y verifica si la operación asíncrona se implementó correctamente.
Demasiados activadores
La cantidad de tareas diferidas se puede ver en la métrica task_count, que también se muestra en el panel de supervisión de tu entorno. Cada activador crea algunos recursos, como conexiones a recursos externos, que consumen memoria.
Los gráficos de consumo de memoria y CPU indican que los recursos insuficientes provocan reinicios porque la sonda de actividad falla debido a la falta de latidos:
Solución: Para solucionar este problema, haz lo siguiente:
- Ajusta los parámetros del activador para asignar más recursos a los activadores o aumentar la cantidad de activadores en tu entorno.
- Reduce la cantidad de tareas diferidas que se ejecutan al mismo tiempo.
Falla de un trabajador de Airflow durante la ejecución de la devolución de llamada
Una vez que el activador finaliza la ejecución, el control vuelve a un trabajador de Airflow, que ejecuta un método de devolución de llamada con una ranura de ejecución. Esta fase está controlada por Celery Executor y, por lo tanto, se aplican la configuración y los límites de recursos correspondientes (como parallelism o worker_concurrency).
Si falla el método de devolución de llamada en el trabajador de Airflow, el trabajador falla o se reinicia el trabajador que ejecuta el método, la tarea se marca como FAILED. En este caso, la operación de reintento vuelve a ejecutar toda la tarea, no solo el método de devolución de llamada.
Bucle infinito en un activador
Es posible implementar un operador de activador personalizado de tal manera que bloquee por completo el bucle del activador principal, de modo que solo se ejecute el activador dañado en ese momento. En este caso, se genera una advertencia en los registros del activador después de que finaliza el activador problemático.
No se encontró la clase de activador
Debido a que la carpeta DAGs no está sincronizada con el activador de Airflow, falta el código del activador intercalado cuando se ejecuta el activador. El error se genera en los registros de la tarea fallida:
ImportError: Module "PACKAGE_NAME" does not define a "CLASS_NAME" attribute/
class
Solución: Importa el código faltante de PyPI.
Mensaje de advertencia sobre el activador en la IU de Airflow
En algunos casos, después de inhabilitar el activador, es posible que veas el siguiente mensaje de advertencia en la IU de 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.
Airflow puede mostrar este mensaje porque los activadores incompletos permanecen en la base de datos de Airflow. Por lo general, este mensaje significa que el activador se inhabilitó antes de que se completaran todos los activadores en tu entorno.
Para ver todos los activadores que se ejecutan en el entorno, consulta la página
Browse > Triggers en la IU de Airflow. Se requiere el rol Admin.
Soluciones:
- Vuelve a habilitar el activador y espera a que se completen las tareas diferidas.
- Accede a la base de datos de Airflow y borra los activadores incompletos de forma manual.
Las tareas permanecen en el estado diferido después de que se inhabilita el activador
Cuando se inhabilita el activador, las tareas que ya están en el estado diferido permanecen en este estado hasta que se alcanza el tiempo de espera. Este tiempo de espera puede ser infinito, según la configuración de Airflow y DAG.
Utiliza una de las siguientes soluciones:
- Marca las tareas como fallidas de forma manual.
- Habilita el activador para completar las tareas.
Te recomendamos que inhabilite el activador solo si tu entorno no ejecuta ningún operador o tarea diferida, y se completan todas las tareas diferidas.