Managed Airflow (terza generazione) | Managed Airflow (seconda generazione) | Managed Airflow (prima generazione legacy)
Questa pagina fornisce passaggi e informazioni per la risoluzione dei problemi comuni relativi al triggerer di Airflow.
Blocco delle operazioni nel trigger
Le attività asincrone potrebbero occasionalmente bloccarsi nei triggerer. Nella maggior parte dei casi, i problemi derivano da risorse del triggerer insufficienti o da problemi con il codice dell'operatore asincrono personalizzato.
I log del triggerer mostrano eventuali messaggi di avviso che possono aiutarti a identificare le cause principali della riduzione del rendimento del triggerer. Esistono due avvisi importanti da cercare.
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 rendimento dovuti a un volume elevato di attività asincrone.
Soluzione: per risolvere il problema:
- Regola i parametri del 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 di Airflow sono 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/example.py:609> result=None> took 0.401 secondQuesto avviso indica un codice operatore specifico eseguito da Managed Service for Apache Airflow. Per progettazione, i trigger si basano sulla libreria
asyncioper l'esecuzione delle operazioni in background. Un'implementazione personalizzata di un trigger potrebbe non rispettare correttamente i contrattiasyncio(ad esempio, a causa di un 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à differite è visibile nella metrica task_count, visualizzata
anche nella dashboard di monitoraggio del tuo
ambiente. Ogni trigger crea alcune risorse, come le connessioni a risorse esterne, che consumano memoria.
I grafici del consumo di memoria e CPU indicano che le risorse insufficienti causano riavvii perché il probe di attività non riesce a causa della mancanza di heartbeat:
Soluzione: per risolvere il problema:
- Regola i parametri del 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 di Airflow durante l'esecuzione del callback
Al termine dell'esecuzione del trigger, il controllo viene restituito a un worker di Airflow, che esegue un metodo di callback utilizzando uno slot di esecuzione. Questa fase è controllata da Celery Executor, pertanto si applicano la configurazione e i limiti di risorse corrispondenti (ad esempio parallelism o worker_concurrency).
Se il metodo di callback non riesce nel worker di Airflow, il worker non riesce 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 loop del triggerer principale, in modo che venga eseguito solo il trigger interrotto alla volta. In questo caso, viene generato un avviso nei log del triggerer al termine del trigger problematico.
Classe del trigger non trovata
Poiché la cartella DAG non è sincronizzata con il triggerer di Airflow, il codice del trigger in linea non è presente quando viene eseguito il trigger. 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 al triggerer nella UI di Airflow
In alcuni casi, dopo la disattivazione del triggerer, 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 di Airflow. Questo messaggio di solito indica che il triggerer è stato disattivato prima del completamento di tutti i trigger nel tuo ambiente.
Puoi visualizzare tutti i trigger in esecuzione nell'ambiente controllando la pagina
Sfoglia > Trigger nella UI di Airflow. È richiesto il ruolo Admin.
Soluzioni:
- Riattiva il triggerer e attendi il completamento delle attività differite.
- Accedi al database di Airflow ed elimina manualmente i trigger incompleti.
Le attività rimangono nello stato differito dopo la disattivazione del triggerer
Quando il triggerer è 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 DAG.
Utilizza una delle seguenti soluzioni:
- Contrassegna manualmente le attività come non riuscite.
- Attiva il triggerer per completare le attività.
Ti consigliamo di disattivare il triggerer solo se il tuo ambiente non esegue operatori o attività differite e tutte le attività differite sono state completate.