Risoluzione dei problemi dell'attivatore Airflow

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Questa pagina fornisce informazioni e passaggi per la risoluzione dei problemi comuni relativi all'attivatore Airflow.

Operazioni di blocco nel trigger

A volte le attività asincrone potrebbero bloccarsi negli attivatori. Nella maggior parte dei casi, i problemi provengono da risorse trigger insufficienti o problemi con il codice operatore asincrono personalizzato.

I log del triggerer mostrano eventuali messaggi di avviso che possono ti aiutano a identificare le cause principali della diminuzione delle prestazioni dell'attivatore. Esistono due metodi avvisi significativi da cercare.

  1. 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, allocare più risorse agli attivatori, ridurre il numero di attività differite eseguite contemporaneamente o aumenta il numero di triggerer 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 regolando il numero di triggerer, ti consigliamo anche di scalare il numero di istanze worker.

  2. 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 contratti asyncio (ad esempio a causa dell'uso scorretto delle parole chiave await e async nel codice Python).

    Soluzione: controlla il codice segnalato nell'avviso e controlla se il l'operazione asincrona sia 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 trigger alcune risorse, come le connessioni a risorse esterne, che consumano la memoria.

Attività differite visualizzate nella dashboard di Monitoring
Figura 1. Attività differite visualizzate nella dashboard di Monitoring (fai clic per ingrandire)
di Gemini Advanced.

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&#39;attivatore si riavvia a causa di risorse insufficienti
Figura 2. Il triggerer si riavvia a causa di risorse insufficienti (fai clic per ingrandire)
di Gemini Advanced.

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

Dopo che il trigger termina l'esecuzione, il controllo torna a un flusso 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 di 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 che blocca completamente il loop dell'attivatore principale, in modo che solo il trigger rotto sia eseguiti in quel momento. 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 nella UI di Airflow

In alcuni casi, dopo aver disattivato l'attivatore, potresti vedere quanto segue 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é 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:

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.

Passaggi successivi