Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Questa pagina fornisce passaggi e informazioni per la risoluzione dei problemi comuni relativi al 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:
- Modifica i parametri dei triggerer per allocare più risorse ai triggerer o aumentare il numero di triggerer nel tuo ambiente.
- Riduci il numero di attività differite eseguite contemporaneamente.
Anche se i triggerer gestiscono le attività differibili, i worker Airflow sono responsabili dell'avvio e del completamento di ogni attività. Se stai modificando il numero di trigger, 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/example.py:609> result=None> took 0.401 secondQuesto avviso indica un codice operatore specifico eseguito da Cloud Composer. I trigger si basano per progettazione sulla libreria
asyncioper 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 chiaveawaiteasyncnel 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 di 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:
- Modifica i parametri dei triggerer per allocare più risorse ai triggerer o aumentare il numero di triggerer nel tuo ambiente.
- Riduci il numero di attività differite eseguite contemporaneamente.
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 trigger personalizzato in modo che blocchi completamente il ciclo del trigger principale, in modo che venga eseguito solo il trigger interrotto alla volta. In questo caso, nei log del trigger viene generato un avviso dopo il completamento del trigger problematico.
Classe del trigger non trovata
Poiché la cartella DAG non è sincronizzata con il trigger 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 del completamento di tutti i trigger nell'ambiente.
Puoi visualizzare tutti i trigger in esecuzione nell'ambiente controllando la pagina
Sfoglia > Trigger nella UI di Airflow. Il ruolo Admin
è obbligatorio.
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.