Solucionar problemas del activador de Airflow

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

En esta página, se proporcionan pasos para solucionar problemas e información de problemas problemas con el activador de Airflow.

Operaciones de bloqueo 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 de activadores insuficientes o problemas con el código de operador asíncrono personalizado.

Los registros del activador muestran los mensajes de advertencia te ayudan a identificar las causas raíz de la disminución del rendimiento de los activadores. Existen dos importantes que hay que tener en cuenta.

  1. Se bloqueó el subproceso asíncrono

    Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.
    

    Esta advertencia indica problemas con el rendimiento debido a un gran volumen de tareas asíncronas.

    Solución: Para abordar este problema, asignar más recursos a los activadores reducir la cantidad de tareas diferidas que se ejecutan al mismo tiempo, o aumentar la cantidad de activadores en tu entorno. Ten en cuenta que, aunque los activadores se encargan de las tareas diferibles, los trabajadores que son responsables de iniciar completar cada tarea. Si ajustas la cantidad de activadores, también considera escalar la cantidad de instancias de trabajador.

  2. Una tarea específica bloqueó el subproceso asíncrono.

    WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/my-custom-code.py:609> result=None> took 0.401 second
    

    Esta advertencia apunta a una parte específica del código de operador que ejecuta Cloud Composer Los activadores por diseño deben basarse en la biblioteca asyncio para que ejecutan operaciones en segundo plano. Una implementación personalizada de un activador no cumplen correctamente con los contratos de asyncio (por ejemplo, debido a errores de el uso de las palabras clave await y async en el código de Python).

    Solución: Inspecciona el código que informa la advertencia y comprueba si la operación asíncrona se haya implementado correctamente.

Hay demasiados activadores

La cantidad de tareas diferidas se puede ver en la métrica task_count, que se también se muestra en el panel de Monitoring de tu entorno. Cada activador crea algunos recursos, como conexiones a recursos externos, que consumen memoria.

Tareas diferidas que se muestran en el panel de Monitoring
Figura 1. Se muestran las tareas diferidas en el panel de Monitoring (haz clic para ampliar)

Los gráficos de memoria y consumo de CPU indican que los recursos insuficientes causan se reinicia porque el sondeo de funcionamiento falla debido a que faltan latidos:

El activador se reinicia debido a que no hay recursos suficientes
. Figura 2: El activador se reinicia debido a que no hay recursos suficientes (haz clic para ampliar)

Solución: Para abordar este problema, asignar más recursos a los activadores reducir la cantidad de tareas diferidas que se ejecutan al mismo tiempo, o aumentar la cantidad de activadores en tu entorno.

Falla de un trabajador de Airflow durante la ejecución de la devolución de llamada

Cuando el activador finaliza la ejecución, el control vuelve a un flujo de Worker, que ejecuta un método de devolución de llamada con una ranura de ejecución. Esta fase es controlado por el ejecutor de Celery y, por lo tanto, la configuración y se aplican límites de recursos (como parallelism o worker_concurrency).

Si el método de devolución de llamada falla en el trabajador de Airflow, el trabajador falla o trabajador que ejecuta el método se reinicia, la tarea se marca como FAILED. En En este caso, la operación de reintento vuelve a ejecutar la tarea completa, no solo de devolución de llamada.

Bucle infinito en un activador

Es posible implementar un operador de activación personalizado de manera que bloquea por completo el bucle del activador principal, para que solo se muestre un activador dañado ejecutado en ese momento. En este caso, una advertencia se genera en los registros del activador después de activador problemático haya finalizado.

No se encontró la clase del activador

Como la carpeta de los DAG no está sincronizada con el activador de Airflow, falta el código de activador intercalado cuando se ejecuta el activador. El error es generados en los registros de la tarea con errores:

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 lo 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 Airflow en la base de datos. Por lo general, este mensaje indica que se inhabilitó el activador antes de que activadores se hayan completado en tu entorno.

Para ver todos los activadores que se ejecutan en el entorno, revisa el Página Explorar &gt; Activadores en la IU de Airflow (el rol Admin es obligatoria).

Soluciones:

Las tareas permanecen en el estado diferido después de que se inhabilita el activador

Cuando el activador está inhabilitado, las tareas que ya están en estado diferido permanecen en este estado hasta que se alcanza el tiempo de espera. Este tiempo de espera puede ser infinita, según la configuración de Airflow y DAG.

Utiliza una de las siguientes soluciones:

  • Marca las tareas de forma manual como fallidas.
  • Habilita el activador para completar las tareas.

Recomendamos inhabilitar el activador solo si tu entorno no ejecuta ninguno las tareas o los operadores diferidos y se completan todas las tareas diferidas.

¿Qué sigue?