Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Questa pagina fornisce informazioni e passaggi per la risoluzione dei problemi comuni relativi all'attivatore Airflow.
Operazioni di blocco nell'attivatore
A volte le attività asincrone potrebbero bloccarsi negli attivatori. Nella maggior parte dei casi, i problemi sono dovuti a risorse di attivazione insufficienti o a problemi con il codice dell'operatore asincrono personalizzato.
I log dell'attivatore mostrano eventuali messaggi di avviso che possono aiutarti a identificare le cause principali del calo del rendimento 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 le attività differibili, sono i worker a essere responsabili dell'avvio e del completamento di 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 indica un frammento specifico di codice dell'operatore eseguito da Cloud Composer. Per impostazione predefinita, gli attivatori devono fare affidamento sulla libreria
asyncio
per eseguire operazioni in background. Un'implementazione personalizzata di un attivatore può non rispettare correttamente i contrattiasyncio
(ad esempio a causa dell'uso errato delle parole chiaveawait
easync
nel codice Python).Soluzione: controlla il codice segnalato dall'avviso e verifica se l'operazione asincrona è implementata correttamente.
Troppi attivatori
Il numero di attività differite è visibile nella metrica task_count
, che viene visualizzata anche nella dashboard Monitoraggio del tuo ambiente. Ogni attivatore
crea alcune risorse, come le connessioni a risorse esterne, che consumano
memoria.
![Attività differite visualizzate nella dashboard di monitoraggio](https://cloud.google.com/static/composer/docs/images/composer-2-triggerer-running-and-queued-tasks.png?authuser=5&hl=it)
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:
![L'attivatore si riavvia a causa di risorse insufficienti](https://cloud.google.com/static/composer/docs/images/composer-2-triggerer-restarts.png?authuser=5&hl=it)
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 è controllata dall'Executor di Celery e pertanto vengono applicati i limiti di configurazione e delle risorse corrispondenti (ad esempio parallelism
o worker_concurrency
).
Se il metodo di callback non va a buon fine nel worker Airflow, il worker non va a buon fine o il worker che esegue il metodo si riavvia, l'attività viene contrassegnata come FAILED
. In questo caso, l'operazione di ripetizione esegue di nuovo l'intera attività, non solo il metodo di callback.
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 di 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 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 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é nel database di Airflow rimangono attivatori incompleti. In genere, questo messaggio indica che l'attivatore è stato disattivato prima del completamento di tutti gli attivatori nel tuo ambiente.
Puoi visualizzare tutti gli attivatori in esecuzione nell'ambiente controllando la pagina Sfoglia > Trigger nell'interfaccia utente di Airflow (è obbligatorio il ruolo Admin
).
Soluzioni:
- Abilita di nuovo l'attivatore e attendi il completamento delle attività differite.
- Accedi al database Airflow ed elimina manualmente gli attivatori incompleti.
Le attività rimangono nello stato differito dopo la disattivazione dell'attivatore
Quando l'attivatore è 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.
- Consenti all'attivatore di completare le attività.
Ti consigliamo di disattivare l'attivatore solo se il tuo ambiente non esegue operatori o attività differiti e tutte le attività differite sono completate.