Cloud Composer 3 | Cloud Composer 2 | Cloud Composer�
本頁面提供 Airflow 觸發器常見問題的疑難排解步驟和資訊。
觸發條件中的封鎖作業
非同步工作偶爾可能會在觸發器中遭到封鎖。 在大多數情況下,問題是出在觸發器資源不足,或是自訂非同步運算子程式碼有問題。
觸發器記錄會顯示任何警告訊息,協助您找出觸發器成效下滑的根本原因。請注意以下兩項重大警告。
非同步執行緒遭到封鎖
Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.
如果非同步工作量過大,可能會導致效能問題,系統就會發出這項警告。
解決方案:如要解決這個問題,請為觸發條件分配更多資源、減少同時執行的延後工作數量,或增加環境中的觸發條件數量。請注意,雖然觸發器會處理可延遲的工作,但負責啟動及最終完成每項工作的仍是工作人員。如果調整觸發器數量,也請考慮調整工作站執行個體數量。
特定工作封鎖了非同步執行緒。
WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/my-custom-code.py:609> result=None> took 0.401 second
這項警告是指 Cloud Composer 執行的特定運算子程式碼。依設計,觸發程序應依賴
asyncio
程式庫在背景執行作業。如果觸發條件的自訂實作方式無法正確遵守asyncio
合約 (例如,Python 程式碼中await
和async
關鍵字的用法不正確),解決方案:檢查警告訊息回報的程式碼,確認非同步作業是否已正確導入。
觸發條件過多
您可以在 task_count
指標中查看延後執行的工作數量,環境的 Monitoring 資訊主頁也會顯示這項指標。每個觸發程序都會建立一些資源,例如外部資源的連線,這些資源會耗用記憶體。

記憶體和 CPU 消耗量圖表顯示,資源不足導致重新啟動,因為缺少心跳訊號,存活探查失敗:

解決方法:如要解決這個問題,請為觸發條件分配更多資源、減少同時執行的延後工作數量,或增加環境中的觸發條件數量。
回呼執行期間 Airflow 工作站當機
觸發程序執行完畢後,控制項會返回 Airflow 工作人員,後者會使用執行時段執行回呼方法。這個階段由 Celery Executor 控制,因此適用相應的設定和資源限制 (例如 parallelism
或 worker_concurrency
)。
如果回呼方法在 Airflow 工作站中失敗、工作站失敗,或執行該方法的工作站重新啟動,工作就會標示為 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 設定而定,這個逾時時間可能無限期。
請使用下列其中一種解決方案:
- 手動將工作標示為失敗。
- 啟用觸發者來完成工作。
只有在環境未執行任何延遲運算子或工作,且所有延遲工作都已完成時,才建議停用觸發器。