Managed Airflow (第 3 代) | Managed Airflow (第 2 代) | Managed Airflow (舊版第 1 代)
本頁面提供 Airflow 觸發器常見問題的疑難排解步驟和資訊。
觸發條件中的封鎖作業
非同步工作偶爾可能會在觸發器中遭到封鎖。 在大多數情況下,問題是出在觸發器資源不足,或是自訂非同步運算子程式碼有問題。
觸發器記錄會顯示任何警告訊息,協助您找出觸發器成效下滑的根本原因。請注意以下兩項重大警告。
非同步執行緒遭到封鎖:
Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.這項警告表示非同步工作量過高,導致效能出現問題。
解決方法:如要解決這個問題,請按照下列步驟操作:
- 調整觸發器參數,將更多資源分配給觸發器,或增加環境中的觸發器數量。
- 減少同時執行的延遲任務數量。
雖然觸發器會處理可延後的工作,但 Airflow 工作人員負責啟動及最終完成每項工作。如要調整觸發器數量,也請考慮擴充工作站執行個體數量。
特定工作封鎖了非同步執行緒:
WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/example.py:609> result=None> took 0.401 second這項警告是指 Managed Service for Apache Airflow 執行的特定運算子程式碼。依設計,觸發程序會依賴
asyncio程式庫在背景執行作業。如果觸發條件的自訂實作方式未正確遵守asyncio合約 (例如,Python 程式碼中的await和async關鍵字使用不正確),解決方案:檢查警告回報的程式碼,確認非同步作業是否正確導入。
觸發條件過多
延後的工作數量會顯示在 task_count 指標中,環境的 Monitoring 資訊主頁也會顯示這項指標。每個觸發程序都會建立一些資源,例如外部資源的連線,這些資源會耗用記憶體。
記憶體和 CPU 消耗量圖表顯示,資源不足導致重新啟動,因為缺少活動訊號,導致存活探測失敗:
解決方法:如要解決這個問題,請按照下列步驟操作:
- 調整觸發器參數,將更多資源分配給觸發器,或增加環境中的觸發器數量。
- 減少同時執行的延遲任務數量。
回呼執行期間 Airflow 工作站當機
觸發程序執行完畢後,控制項會返回 Airflow 工作人員,後者會使用執行時段執行回呼方法。這個階段由 Celery Executor 控制,因此適用相應的設定和資源限制 (例如 parallelism 或 worker_concurrency)。
如果回呼方法在 Airflow worker 中失敗、worker 失敗,或執行該方法的 worker 重新啟動,工作就會標示為 FAILED。在這種情況下,重試作業會重新執行整個工作,而不只是回呼方法。
觸發條件中的無限迴圈
您可以實作自訂觸發程序運算子,完全封鎖主要觸發程序迴圈,這樣一次只會執行一個中斷的觸發程序。在此情況下,有問題的觸發程序完成後,觸發程序記錄檔中會產生警告。
找不到觸發條件類別
由於 DAG 資料夾未與 Airflow 觸發器同步,因此執行觸發器時,系統會缺少內嵌的觸發程式碼。錯誤會產生在失敗工作的記錄中:
ImportError: Module "PACKAGE_NAME" does not define a "CLASS_NAME" attribute/
class
解決方法:從 PyPI 匯入缺少的程式碼。
Airflow UI 中關於觸發器的警告訊息
在某些情況下,停用觸發器後,您可能會在 Airflow UI 中看到下列警告訊息。
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 資料庫中仍有不完整的觸發條件,因此 Airflow 可能會顯示這則訊息。這則訊息通常表示觸發器在環境中的所有觸發程序完成前遭到停用。
如要查看環境中執行的所有觸發條件,請前往 Airflow UI 中的「Browse」>「Triggers」頁面。必須具備Admin角色。
解決方法:
- 再次啟用觸發器,然後等待延遲工作完成。
- 存取 Airflow 資料庫,然後手動刪除不完整的觸發程序。
停用觸發器後,工作仍會處於延遲狀態
如果停用觸發器,已處於延遲狀態的任務會維持這個狀態,直到逾時為止。視 Airflow 和 DAG 設定而定,這個逾時時間可能無限期。
請使用下列其中一種解決方案:
- 手動將工作標示為失敗。
- 啟用觸發者來完成工作。
只有在環境未執行任何延遲運算子或工作,且所有延遲工作都已完成時,才建議停用觸發器。