Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
本頁面提供 Airflow 觸發器常見問題的疑難排解步驟和資訊。
在觸發條件中封鎖作業
非同步工作可能偶爾會在觸發器中遭到封鎖。在大多數情況下,問題是因為觸發器資源不足,或是自訂非同步運算子程式碼有問題。
Triggerer 記錄會顯示任何警告訊息,協助您找出 Triggerer 效能下滑的根本原因。請留意兩項重要警告。
非同步執行緒遭到封鎖
Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.
這項警告表示,由於異步工作數量龐大,因此導致效能出現問題。
解決方法:如要解決這個問題,請為觸發器分配更多資源,減少同時執行的延遲工作數量,或是在環境中增加觸發器數量。請注意,即使觸發器會處理可延後的工作,但 worker 還是會負責啟動並最終完成每項工作。如果您要調整觸發器數量,建議您一併調整工作站執行個體數量。
特定工作阻斷了非同步執行緒。
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 worker,後者會使用執行時段執行回呼方法。這個階段由 Celery 執行緒控制,因此會套用相應的設定和資源限制 (例如 parallelism
或 worker_concurrency
)。
如果回呼方法在 Airflow 工作站中失敗、工作站失敗,或是執行方法的工作站重新啟動,工作就會標示為 FAILED
。在這種情況下,重試作業會重新執行整個工作,而非只重新執行回呼方法。
觸發事件中的無限迴圈
您可以實作自訂觸發事件運算子,以便完全封鎖主要觸發器迴圈,這樣一來,系統就只會執行一個錯誤的觸發事件。在這種情況下,系統會在問題觸發條件完成後在觸發器記錄檔中產生警告。
找不到觸發條件類別
由於 DAG 資料夾未與 Airflow 觸發器同步,因此在執行觸發器時,內嵌的觸發器程式碼會遺失。系統會在失敗工作記錄中產生錯誤:
ImportError: Module "PACKAGE_NAME" does not define a "CLASS_NAME" attribute/
class
解決方法:從 PyPI 匯入缺少的程式碼。
Airflow 使用者介面中的觸發器警告訊息
在某些情況下,在停用觸發器後,您可能會在 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 設定。
請使用下列其中一種解決方案:
- 手動將工作標示為失敗。
- 啟用觸發器來完成工作。
建議您僅在環境未執行任何延後運算子或工作,且所有延後工作已完成時,才停用觸發器。