Managed Airflow (Gen 3) | Managed Airflow (Gen 2) | Managed Airflow (Legacy Gen 1)
Diese Seite enthält Schritte zur Fehlerbehebung und Informationen zu häufigen Problemen mit dem Airflow-Triggerer.
Blockierende Vorgänge im Trigger
Asynchrone Aufgaben können gelegentlich in Triggerern blockiert werden. In den meisten Fällen werden die Probleme durch unzureichende Triggerer-Ressourcen oder Probleme mit benutzerdefiniertem asynchronem Operatorcode verursacht.
In den Triggerer-Logs werden alle Warnmeldungen angezeigt, die Ihnen helfen können, die Ursachen für eine verringerte Triggerer-Leistung zu ermitteln. Es gibt zwei wichtige Warnungen, auf die Sie achten sollten.
Asynchroner Thread blockiert:
Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.Diese Warnung weist auf Leistungsprobleme aufgrund einer hohen Anzahl asynchroner Aufgaben hin.
Lösung: So beheben Sie dieses Problem:
- Passen Sie die Triggerer-Parameter an, um den Triggerern mehr Ressourcen zuzuweisen oder die Anzahl der Triggerer in Ihrer Umgebung zu erhöhen.
- Reduzieren Sie die Anzahl der ausgesetzten Aufgaben, die gleichzeitig ausgeführt werden.
Obwohl Triggerer aussetzbare Aufgaben verarbeiten, sind Airflow-Worker für das Starten und letztendlich für den Abschluss jeder Aufgabe verantwortlich. Wenn Sie die Anzahl der Triggerer anpassen, sollten Sie auch die Anzahl Ihrer Worker-Instanzen skalieren.
Eine bestimmte Aufgabe hat den asynchronen Thread blockiert:
WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/example.py:609> result=None> took 0.401 secondDiese Warnung verweist auf einen bestimmten Operatorcode, der von Managed Service for Apache Airflow ausgeführt wird. Trigger verwenden standardmäßig die
asyncio-Bibliothek, um Vorgänge im Hintergrund auszuführen. Eine benutzerdefinierte Implementierung eines Triggers kann dieasyncio-Verträge nicht ordnungsgemäß einhalten (z. B. aufgrund einer falschen Verwendung der Schlüsselwörterawaitundasyncim Python-Code).Lösung: Untersuchen Sie den Code, der in der Warnung angegeben ist, und prüfen Sie, ob der asynchrone Vorgang ordnungsgemäß implementiert ist.
Zu viele Trigger
Die Anzahl der ausgesetzten Aufgaben ist im task_count Messwert sichtbar, der
auch im Monitoring-Dashboard Ihrer
Umgebung angezeigt wird. Jeder Trigger erstellt einige Ressourcen wie Verbindungen zu externen Ressourcen, die Arbeitsspeicher verbrauchen.
Diagramme zum Arbeitsspeicher- und CPU-Verbrauch zeigen, dass unzureichende Ressourcen Neustarts verursachen, weil die Liveness-Probe aufgrund fehlender Heartbeats fehlschlägt:
Lösung: So beheben Sie dieses Problem:
- Passen Sie die Triggerer-Parameter an, um den Triggerern mehr Ressourcen zuzuweisen oder die Anzahl der Triggerer in Ihrer Umgebung zu erhöhen.
- Reduzieren Sie die Anzahl der ausgesetzten Aufgaben, die gleichzeitig ausgeführt werden.
Absturz eines Airflow-Workers während der Callback-Ausführung
Nachdem der Trigger die Ausführung beendet hat, wird die Steuerung an einen Airflow-Worker zurückgegeben, der eine Callback-Methode mit einem Ausführungs-Slot ausführt. Diese Phase wird vom Celery-Executor gesteuert. Daher gelten die entsprechenden Konfigurations- und Ressourcenlimits (z. B. parallelism oder worker_concurrency).
Wenn die Callback-Methode im Airflow-Worker fehlschlägt, der Worker fehlschlägt oder der Worker, der die Methode ausführt, neu gestartet wird, wird die Aufgabe als FAILED markiert. In diesem Fall wird beim Wiederholungsvorgang die gesamte Aufgabe noch einmal ausgeführt, nicht nur die Callback-Methode.
Endlosschleife in einem Trigger
Es ist möglich, einen benutzerdefinierten Trigger-Operator so zu implementieren, dass er die Hauptschleife des Triggerers vollständig blockiert, sodass jeweils nur der eine fehlerhafte Trigger ausgeführt wird. In diesem Fall wird in den Triggerer-Logs eine Warnung generiert, nachdem der problematische Trigger beendet wurde.
Triggerklasse nicht gefunden
Da der Ordner „DAGs“ nicht mit dem Airflow-Triggerer synchronisiert wird, fehlt der Inline-Triggercode, wenn der Trigger ausgeführt wird. Der Fehler wird in den Logs der fehlgeschlagenen Aufgabe generiert:
ImportError: Module "PACKAGE_NAME" does not define a "CLASS_NAME" attribute/
class
Lösung: Importieren Sie den fehlenden Code aus PyPI.
Warnmeldung zum Triggerer in der Airflow-Benutzeroberfläche
In einigen Fällen wird nach dem Deaktivieren des Triggerers möglicherweise die folgende Warnmeldung in der Airflow-Benutzeroberfläche angezeigt.
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 kann diese Meldung anzeigen, weil unvollständige Trigger in der Airflow-Datenbank verbleiben. Diese Meldung bedeutet in der Regel, dass der Triggerer deaktiviert wurde, bevor alle Trigger in Ihrer Umgebung abgeschlossen waren.
Sie können alle Trigger, die in der Umgebung ausgeführt werden, auf der Seite
Browse > Triggers in der Airflow-Benutzeroberfläche ansehen. Die Rolle Admin ist erforderlich.
Lösungen:
- Aktivieren Sie den Triggerer wieder und warten Sie, bis die ausgesetzten Aufgaben abgeschlossen sind.
- Greifen Sie auf die Airflow-Datenbank zu und löschen Sie unvollständige Trigger manuell.
Aufgaben bleiben im Status „Ausgesetzt“, nachdem der Triggerer deaktiviert wurde
Wenn der Triggerer deaktiviert ist, bleiben Aufgaben, die sich bereits im Status „Ausgesetzt“ befinden, in diesem Status, bis das Zeitlimit erreicht ist. Dieses Zeitlimit kann je nach Airflow- und DAG-Konfiguration unendlich sein.
Verwenden Sie eine der folgenden Lösungen:
- Markieren Sie die Aufgaben manuell als fehlgeschlagen.
- Aktivieren Sie den Triggerer, um die Aufgaben abzuschließen.
Wir empfehlen, den Triggerer nur zu deaktivieren, wenn in Ihrer Umgebung keine ausgesetzten Operatoren oder Aufgaben ausgeführt werden und alle ausgesetzten Aufgaben abgeschlossen sind.