Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Questa pagina fornisce passaggi e informazioni per la risoluzione dei problemi comuni con il trigger di Airflow.
Operazioni di blocco nel trigger
Le attività asincrone potrebbero occasionalmente essere bloccate nei triggerer. Nella maggior parte dei casi, i problemi derivano da risorse di attivazione insufficienti o da problemi con il codice dell'operatore asincrono personalizzato.
I log dei trigger mostrano eventuali messaggi di avviso che possono aiutarti a identificare le cause principali del calo del rendimento dei trigger. Ci sono due avvisi importanti da tenere d'occhio.
Thread asincrono bloccato
Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.
Questo avviso segnala problemi di prestazioni dovuti a un volume elevato di attività asincrone.
Soluzione: per risolvere il problema, alloca più risorse agli attivatori, riduci il numero di attività differite eseguite contemporaneamente o aumenta il numero di attivatori nel tuo ambiente. Tieni presente che, anche se i trigger gestiscono le attività differibili, sono i worker a essere responsabili dell'avvio e del completamento di ogni attività. Se modifichi il numero di triggerer, valuta anche la possibilità di scalare il numero di istanze worker.
Un'attività specifica ha bloccato il thread asincrono.
WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/my-custom-code.py:609> result=None> took 0.401 second
Questo avviso indica un codice operatore specifico eseguito da Cloud Composer. I trigger per progettazione devono basarsi sulla libreria
asyncio
per l'esecuzione di operazioni in background. Un'implementazione personalizzata di un trigger potrebbe non rispettare correttamente i contrattiasyncio
(ad esempio a causa dell'utilizzo errato delle parole chiaveawait
easync
nel codice Python).Soluzione: esamina il codice segnalato dall'avviso e verifica se l'operazione asincrona è implementata correttamente.
Troppi trigger
Il numero di attività posticipate è visibile nella metrica task_count
, che viene
visualizzata anche nella dashboard Monitoring del tuo ambiente. Ogni trigger
crea alcune risorse, ad esempio connessioni a risorse esterne, che consumano
memoria.

I grafici del consumo di memoria e CPU indicano che risorse insufficienti causano riavvii perché il probe di attività non riesce a causa della mancanza di heartbeat:

Soluzione: per risolvere il problema, alloca più risorse agli attivatori, riduci il numero di attività differite eseguite contemporaneamente o aumenta il numero di attivatori nel tuo ambiente.
Arresto anomalo di un worker Airflow durante l'esecuzione del callback
Al termine dell'esecuzione del trigger, il controllo torna a un worker Airflow, che esegue un metodo di callback utilizzando uno slot di esecuzione. Questa fase è
controllata da Celery Executor e pertanto si applicano i limiti di configurazione e
risorse corrispondenti (ad esempio parallelism
o worker_concurrency
).
Se il metodo di callback non riesce nel worker Airflow, il worker non funziona o il
worker che esegue il metodo viene riavviato, l'attività viene contrassegnata come FAILED
. In
questo caso, l'operazione di ripetizione esegue nuovamente l'intera attività, non solo il
metodo di callback.
Loop infinito in un trigger
È possibile implementare un operatore di attivazione personalizzato in modo che blocchi completamente il ciclo di attivazione principale, in modo che venga eseguito solo l'attivatore interrotto alla volta. In questo caso, nei log del triggerer viene generato un avviso dopo il completamento del trigger problematico.
Classe trigger non trovata
Poiché la cartella DAG non è sincronizzata con il trigger di Airflow, il codice del trigger incorporato non è presente quando il trigger viene eseguito. L'errore viene generato nei log dell'attività non riuscita:
ImportError: Module "PACKAGE_NAME" does not define a "CLASS_NAME" attribute/
class
Soluzione: importa il codice mancante da PyPI.
Messaggio di avviso relativo all'attivatore nella UI di Airflow
In alcuni casi, dopo la disattivazione del trigger, potresti visualizzare il seguente messaggio di avviso nella UI di 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 può mostrare questo messaggio perché i trigger incompleti rimangono nel database Airflow. Questo messaggio di solito indica che il trigger è stato disattivato prima che tutti i trigger siano stati completati nel tuo ambiente.
Puoi visualizzare tutti i trigger in esecuzione nell'ambiente selezionando la pagina
Sfoglia > Trigger nell'interfaccia utente di Airflow (è richiesto il ruolo Admin
).
Soluzioni:
- Riattiva il trigger e attendi il completamento delle attività differite.
- Accedi al database Airflow ed elimina manualmente i trigger incompleti.
Le attività rimangono nello stato differito dopo la disattivazione del trigger
Quando il trigger è disattivato, le attività già nello stato differito rimangono in questo stato fino al raggiungimento del timeout. Questo timeout può essere infinito, a seconda della configurazione di Airflow e del DAG.
Utilizza una delle seguenti soluzioni:
- Contrassegna manualmente le attività come non riuscite.
- Consenti all'attivatore di completare le attività.
Ti consigliamo di disattivare il trigger solo se il tuo ambiente non esegue operatori o attività differite e tutte le attività differite sono completate.