Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Questa pagina fornisce procedure e informazioni per la risoluzione dei problemi problemi con l'attivatore Airflow.
Operazioni di blocco nell'attivatore
Le attività asincrone potrebbero a volte essere bloccate negli attivatori. Nella maggior parte dei casi, i problemi provengono da risorse trigger insufficienti o problemi con il codice operatore asincrono personalizzato.
I log dell'attivatore mostrano eventuali messaggi di avviso che possono aiutarti a identificare le cause principali del calo delle prestazioni dell'attivatore. Esistono due avvertimenti 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 gli attivatori gestiscono attività irrinunciabili, i lavoratori responsabili dell'avvio e della per completare ogni attività. Se stai modificando il numero di triggerer, ti consigliamo di adattare 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 rimanda a una parte specifica di codice operatore eseguita dal con Cloud Composer. Per impostazione predefinita, i trigger devono basarsi sulla libreria
asyncio
per operazioni in background. Un'implementazione personalizzata di un attivatore può non rispettare correttamente i contrattiasyncio
(ad esempio a causa dell'uso scorretto delle parole chiaveawait
easync
nel codice Python).Soluzione: controlla 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
, che viene visualizzata anche nella dashboard Monitoraggio del tuo ambiente. Ogni trigger
alcune risorse, come le connessioni a risorse esterne, che consumano
la memoria.
I grafici del consumo di memoria e CPU indicano che risorse insufficienti causano riavvii perché il probe di attività non va a buon fine a causa di heartbeat mancanti:
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 dell'attivatore, il controllo torna a un worker Airflow, che esegue un metodo di callback utilizzando uno slot di esecuzione. Questa fase
controllato da Celery Executor e quindi la configurazione
si applicano limiti delle risorse (ad esempio parallelism
o worker_concurrency
).
Se il metodo di callback non riesce nel worker Airflow, il worker non riesce o
worker che esegue il metodo si riavvia, l'attività viene contrassegnata come FAILED
. Nella
In questo caso, l'operazione di ripetizione esegue nuovamente l'intera attività, non solo
di callback di Google.
Loop infinito in un attivatore
È possibile implementare un operatore di trigger personalizzato in modo da bloccare completamente il loop dell'attivatore principale, in modo che venga eseguito solo l'attivatore errato. In questo caso, un avviso viene generato nei log dell'attivatore al termine dell'attivatore problematico.
Classe trigger non trovata
Poiché la cartella dei DAG non è sincronizzata con l'attivatore Airflow, il codice dell'attivatore incorporato non è presente quando l'attivatore viene eseguito. L'errore è generate 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 sull'attivatore nell'interfaccia utente di Airflow
In alcuni casi, dopo la disattivazione dell'attivatore, potresti visualizzare il seguente messaggio di avviso nell'interfaccia utente 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 in Airflow per configurare un database. In genere, questo messaggio indica che l'attivatore è stato disattivato prima del completamento di tutti gli attivatori nel tuo ambiente.
Puoi visualizzare tutti i trigger in esecuzione nell'ambiente controllando il
Sfoglia > Trigger nella UI di Airflow (il ruolo Admin
è
obbligatorio).
Soluzioni:
- Abilita di nuovo l'attivatore e attendi che attività differite da completare.
- Accedi al database Airflow ed elimina manualmente gli attivatori incompleti.
Le attività rimangono nello stato differito dopo la disattivazione dell'attivatore
Quando l'attivatore è disabilitato, le attività che sono già in stato differito rimangono in questo stato fino al raggiungimento del timeout. Questo timeout può essere infinita, a seconda della configurazione di Airflow e DAG.
Utilizza una delle seguenti soluzioni:
- Contrassegna manualmente le attività come non riuscite.
- Consenti all'attivatore di completare le attività.
Ti consigliamo di disabilitare l'attivatore solo se nel tuo ambiente non vengono eseguiti operatori o attività differite e tutte le attività differite vengono completate.