Risoluzione dei problemi dell'attivatore Airflow

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.

  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 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.

  2. 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
    second
    

    Questo avviso indica un codice operatore specifico eseguito da Managed Service for Apache Airflow. Per progettazione, i trigger si basano sulla libreria asyncio per l'esecuzione delle operazioni in background. Un'implementazione personalizzata di un trigger potrebbe non rispettare correttamente i contratti asyncio (ad esempio, a causa di un utilizzo errato delle parole chiave await e async nel 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.

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

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:

Riavvii del triggerer a causa di risorse insufficienti
Figura 1. Riavvio del triggerer a causa di risorse insufficienti (fai clic per ingrandire)

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:

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.

Passaggi successivi