動態執行緒資源調度

動態執行緒資源配置是 Dataflow 垂直擴充功能套件的一部分。這項功能會調整每個 Dataflow 工作站執行的平行工作數量 (也稱為「套裝組合」),以輔助 Dataflow 的自動水平調度資源功能。目標是提高 Dataflow 管道的整體效率。

Dataflow 執行管道時,處理作業會分配到多個 Compute Engine 虛擬機器 (VM),也就是工作站。執行緒是在較大程序中執行的單一可執行工作。 Dataflow 會在每個工作站上啟動多個執行緒。

啟用動態調度執行緒功能後,Dataflow 服務會自動選擇在每個 Dataflow 工作站上執行的適當執行緒數量。由於每個執行緒都會執行一項工作,因此增加執行緒數量可讓工作站並行執行更多工作。搭配水平自動調度資源功能使用這項功能時,管道使用的執行緒總數維持不變,但工作站數量會減少。

動態執行緒擴充功能會使用演算法,根據管道執行期間產生的資源用量信號,判斷每個工作站需要的執行緒數量。詳情請參閱本頁的「運作方式」一節。

優點

動態執行緒資源配置可能帶來下列優點。

  • 提高每個工作站的 CPU 和記憶體使用率,讓 Dataflow 工作站更有效率地處理資料。
  • 調整可用的工作執行緒數量,在管道執行期間平行執行工作,藉此提升平行處理能力。
  • 減少處理大型資料集所需的工作站數量,進而降低費用。

支援與限制

  • 使用 Java、Python 和 Go SDK 的管道可進行動態執行緒調整。
  • Dataflow 工作必須使用 Runner v2
  • 僅支援批次管道。
  • 耗用大量 CPU 或記憶體的管道可能無法從動態執行緒擴充功能獲益。
  • 動態執行緒調整功能不會縮短 Dataflow 工作完成所需的時間。

運作方式

動態調度執行緒功能會運用自動調整原則,動態調高或調低 Dataflow 工作站集區中每個工作站的執行緒數量。每個工作站的執行緒數量會獨立調整。每個執行緒都會執行一項工作。增加執行緒數量可讓工作站平行執行更多工作。隨著工作完成且不再需要執行緒,執行緒數量會減少。演算法會決定每個工作站需要多少執行緒。

當工作站上的執行緒數量達到每個 vCPU 最多兩個執行緒時,必須符合下列條件:

  • 工作站的記憶體使用率低於 50%。
  • 工作站的 CPU 使用率低於 65%。

如果符合下列條件,工作站的執行緒數量會縮減至每個 vCPU 最少一個執行緒:

  • 工作站的記憶體使用率超過 70%。

如要查看工作的記憶體和 CPU 使用率,請使用 Dataflow 網頁介面的「Job metrics」(工作指標) 分頁標籤。

為確保建議有效,Dataflow 會等待資源用量穩定後,再將建議傳送給工作人員。舉例來說,記憶體和 CPU 使用率可能在調整範圍內,但由於資源使用率仍在成長,Dataflow 不會傳送建議。資源用量穩定後,Dataflow 就會傳送建議。

如果發生記憶體不足 (OOM) 錯誤,系統會自動停用執行緒縮放功能,並為每個 vCPU 執行一個執行緒。

啟用動態執行緒資源配置

如要啟用動態執行緒資源配置,請使用下列 Dataflow 服務選項

Java

--dataflowServiceOptions=enable_dynamic_thread_scaling

Python

--dataflow_service_options=enable_dynamic_thread_scaling

Go

--dataflow_service_options=enable_dynamic_thread_scaling

啟用動態執行緒資源調度後,您也可以設定管道在執行期間可用的初始和最大工作站數量。詳情請參閱「管道選項」。

確認已啟用動態執行緒縮放功能

啟用動態執行緒資源配置後,工作人員記錄檔中會顯示下列訊息:

Enabling thread vertical scaling feature in worker.

如要查看工作站記錄檔,請在記錄檔探索工具中,使用「Query」窗格,依「Log name」(記錄名稱)篩選記錄。在篩選器中使用下列記錄名稱:

projects/PROJECT_ID/logs/dataflow.googleapis.com%2Fharness

您可以在工作站記錄檔中查看建議的執行緒數。以下訊息包含建議的執行緒數量:

worker_thread_scaling_report_response { recommended_thread_count: NUMBER }

如果資源用量不在調度範圍內,顯示的值會等於工作站上的 vCPU 數量。

您也可以使用 Google Cloud 控制台,查看是否已啟用動態執行緒調度功能。啟用後,在 Dataflow「工作資訊」面板的「管道選項」部分中,「dataflowServiceOptions」列會顯示 enable_dynamic_thread_scaling

疑難排解

本節說明如何排解動態執行緒調整相關的常見問題。

啟用動態執行緒資源配置後,效能會降低

在下列情況下,增加執行緒數量可能會導致效能問題:

  • 如果多個程序嘗試使用相同資源,只有一個程序可以使用該資源,其他程序則必須等待。這種情況稱為「資源爭用」。發生資源爭用時,管道效能可能會下降。
  • 發生記憶體不足錯誤時,系統會停用動態執行緒資源配置。在某些情況下,記憶體不足錯誤可能會導致管道失敗。

確認執行緒數量是否增加。如要瞭解如何驗證建議的執行緒數量,請參閱本頁的「確認已啟用執行緒擴縮」。

如果已啟用執行緒資源配置,請在執行管道時不要加入動態執行緒資源配置服務選項,即可解決這個問題。

整合式工作人員…已啟用和已停用

啟用動態執行緒資源配置後,工作可能會失敗並顯示下列錯誤:

The workflow could not be created. Causes: (ID): Unified worker misconfigured by user and was both enabled and disabled.

如果明確停用 Runner v2,就會發生這個錯誤。

如要解決這個問題,請啟用 Runner v2。詳情請參閱「使用 Dataflow Runner V2」頁面的「啟用 Dataflow Runner v2」一節。

升級 SDK

啟用動態執行緒資源配置後,工作可能會失敗並顯示下列錯誤:

Java

Dataflow Runner v2 requires the Apache Beam Java SDK version 2.29.0 or higher. Please upgrade your SDK and resubmit your job.

Python

Dataflow Runner v2 requires the Apache Beam SDK, version 2.21.0 or higher. Please upgrade your SDK and resubmit your job.

如果 SDK 版本不支援 Runner v2,就無法啟用這項功能,並會發生這項錯誤。

如要解決這個問題,請使用支援 Runner v2 的 SDK 版本。

無法啟用執行緒垂直擴展功能

啟用動態執行緒資源配置後,工作可能會失敗並顯示下列錯誤:

The workflow could not be created. Causes: (ID): Thread vertical scaling feature can not be enabled while number_of_worker_harness_threads is specified.

如果管道使用 numberOfWorkerHarnessThreadsnumber_of_worker_harness_threads pipeline 選項,明確設定每個工作站的執行緒數量,就會發生這個錯誤。

如要解決這個問題,請從管道中移除 numberOfWorkerHarnessThreadsnumber_of_worker_harness_threads 管道選項。