從嚴格的基礎架構限制轉移至彈性資源定義,有助於:
- 盡可能取得運算資源。
- 確保在區域需求量高時,自動調度資源作業能順利進行。
- 避免管道啟動延遲,並消除容量瓶頸。
舉例來說,您可以設定最低資源需求 (例如 4 個 vCPU 和 16 GB 的 RAM),而不是將管道限制在單一可用區的特定機型 (例如 us-central1-a 中的 n1-standard-4 工作人員)。如果 us-central1-a 或 N1 系列機器暫時受到容量限制,Dataflow 可以在其他可用區和機器系列 (例如 E2、N2 或 N2D) 中,自動佈建相容的工作站 VM。這種彈性有助於確保管道啟動和擴充時,不必等待單一受限的硬體集區。
本文適用於管理 Dataflow 工作負載的資料工程師、雲端架構師和平台管理員,協助他們提升管道可靠性、總處理量和基礎架構可用性。
DFE 總覽
Dataflow 是全代管的無伺服器資料處理服務,可動態佈建 Compute Engine 虛擬機器 (VM) 執行個體,執行 Apache Beam 管道。在大型批次處理和串流管道中,worker 集區經常會擴充至數十或數百個 VM 執行個體。
如果管道設定了嚴格的基礎架構限制,在高需求量期間就可能發生佈建延遲。嚴格限制的例子包括:
- 將單一機型 (例如
n1-standard-4) 硬式編碼。 - 將管道固定至特定 Compute Engine 可用區。
如果該特定機型或可用區暫時需求量過高,Dataflow 就無法分配運算資源。這可能會導致佈建延遲或發生錯誤,例如 ZONE_RESOURCE_POOL_EXHAUSTED 或 RESOURCE_POOL_EXHAUSTED。
運用 DFE 原則,有助於將管道架構從僵硬的靜態基礎架構宣告,轉移至彈性且以需求為基礎的資源定義。這項彈性功能可讓 Dataflow 在 Google Cloud中,動態將運算作業分配到各種可用的硬體集區,協助您盡量取得運算資源,同時減少作業負擔。
DFE 最佳做法
請採用下列最佳做法,盡量提高運算資源的可用性、提升自動調度資源的反應速度,並建構彈性管道。
啟用自動選取 VM
請使用 Auto VM selection 和 Apache Beam 資源提示,而不是透過 worker 機型 管道選項,硬式編碼靜態機型。指定最低資源需求 (min_ram 或 cpu_count) 時,Dataflow 會自動啟用執行個體彈性,並從相容的機型清單中佈建工作站。
工作負載支援:
- 批次管道:指定資源提示時,系統會自動啟用「適當大小」和「自動選取 VM」。
- 串流管道:如要適當調整資源,必須設定
--experiments=enable_streaming_rightfitting管道選項,並啟用水平自動調度資源 (預設為啟用) 和 Streaming Engine (--enable_streaming_engine)。
如要設定自動 VM 選取功能,請使用指令列選項、SDK 管道選項或彈性範本執行參數,在管道層級指定最低資源需求 (min_ram 或 cpu_count)。如需 Java 和 Python 的詳細設定說明和程式碼範例,請參閱「使用資源提示」。
使用區域工作站位置 (避免可用區釘選)
設定 Dataflow,在所選區域內的所有正常運作可用區中,動態排定 worker VM。
指定 --region 管道選項,並省略 --zone 和 --worker_zone。例如:
--region=us-central1
使用代管服務分離狀態和隨機排序
如果管道未使用受管理後端服務,系統會直接在 worker VM 的磁碟和記憶體中執行資料重組作業,並儲存串流狀態。這種緊耦合需要較大的 worker 磁碟,並將工作負載的存續期繫結至特定 VM 執行個體,因此在容量限制期間更難以替換 worker。
- 批次工作 - 使用 Dataflow Shuffle: 針對在支援的工作站機型上執行的批次管道,系統預設會啟用 Dataflow Shuffle,並將資料重組作業從工作站 VM 卸載至 Google 代管的專屬後端服務。
- 串流工作 - 使用 Streaming Engine:
Streaming Engine 會將視窗狀態儲存空間和計時器管理作業,從工作站 VM 卸載至專用的高回應速度後端基礎架構。如果管道使用 Apache Beam SDK 2.30.0 以上版本,Streaming Engine 預設為啟用。如要顯式啟用,請傳遞
--enable_streaming_engine管道選項。
針對批次管道使用彈性資源排程 (FlexRS)
對於非時間關鍵的批次工作負載 (例如每晚 ETL、資料湖泊擷取或每日匯總),請使用彈性資源排程 (FlexRS)。
如要啟用 FlexRS,請設定 flexRS 目標管道選項:
- Python 管道:
--flexrs_goal=COST_OPTIMIZED - Java 管道:
--flexRSGoal=COST_OPTIMIZED
為 Flex 範本設定彈性啟動器 VM 類型
使用 Flex 範本啟動管道時,管道啟動器 VM 預設為 e2-standard-2。在大多數情況下,預設 VM 都能正常運作,但如果遇到容量限制,您可以在執行 gcloud dataflow flex-template run 指令時使用 --launcher-machine-type 選項,自訂設定:
gcloud dataflow flex-template run my-job \
--template-file-gcs-location="gs://my-bucket/template.json" \
--region="us-central1" \
--launcher-machine-type="n2-standard-2"
作業考量和取捨
採用 DFE 最佳做法可大幅提升運算資源取得率、自動調度資源回應速度和運作可靠性,但設計架構時,請考量下列運作因素和取捨:
自動選取 VM 的注意事項
- 可靠性與最高效能:自動 VM 選取功能會優先考量工作啟動可靠性和運算資源取得能力,而非最高執行效能。由於 Dataflow 會從多個候選機器家族 (例如 E2、N2、N4 和 N2D) 佈建資源,因此執行階段效能和處理量可能會因佈建的機器家族而略有不同。對於執行 SLA 嚴格的運算密集型工作負載,請先使用自動 VM 選取功能測試管道,建立效能基準,再廣泛部署。如果工作負載需要特定硬體平台或時脈速度,且您可容忍容量限制,則可繼續設定特定機型。
- 候選系列適用的 Compute Engine 配額:由於自動虛擬機器選取功能可從多個候選機器系列佈建工作站,請確保 Google Cloud 專案在目標區域中,為每個候選系列提供足夠的 Compute Engine vCPU 和記憶體配額。如果主要家庭發生容量不足的情況,且專案缺少備援家庭的配額,系統就會因
QUOTA_EXCEEDED錯誤而無法佈建 worker。 - 串流管道的必要條件:對於串流管道,系統預設不會啟用適當大小和自動 VM 選取功能。您必須明確指定
--experiments=enable_streaming_rightfitting,並確保 Streaming Engine (--enable_streaming_engine) 和水平自動調度資源功能都已啟用。 設定排除項目:如果您設定下表中的任何功能或選項,系統會自動略過或不支援自動選取 VM:
功能 旗標或設定選項 附註 明確的機型 --worker_machine_type或--machine_type(Python)--workerMachineType(Java)系統會略過自動 VM 選取功能,改用指定的機型。 自訂磁碟類型、佈建的 IOPS 或處理量 --disk_type、--disk_provisioned_iops或--disk_provisioned_throughput_mibps系統會略過自動 VM 選取程序。系統支援使用 --disk_size_gb設定自訂磁碟大小。最低 CPU 平台 --min_cpu_platform(Python)--minCpuPlatform(Java)設定最低 CPU 平台會略過自動 VM 選取功能。 Confidential VM --experiments=enable_confidential_compute自動選取 VM 不支援機密 VM 執行個體。 GPU 或 TPU 加速器 --dataflow_service_options=worker_accelerator=...或accelerator資源提示自動選取 VM 僅適用於沒有加速器的工作負載。 Dataflow Prime --dataflow_service_options=enable_primeDataflow Prime 使用垂直自動調度資源和動態適當調整大小功能,而非自動 VM 選取功能。 彈性資源排程 (FlexRS) --flexrs_goal=COST_OPTIMIZED(Python)--flexRSGoal=COST_OPTIMIZED(Java)FlexRS 會管理自己的工作站集區和排程緩衝區。
彈性資源排程 (FlexRS) 的取捨
- 排程延遲時間:FlexRS 最多可能在工作執行前 6 小時,才開始排程。如果管道的完成時間服務等級協議 (SLA) 嚴格,或下游依附元件緊密,請勿使用 FlexRS。
區域刊登位置和資料位置
- 代管服務必要條件:只有使用 Dataflow Shuffle 處理批次資料,或使用 Streaming Engine 處理串流資料的工作,才支援區域工作站刊登位置。未使用這些代管後端服務的工作會採用自動可用區放置功能,系統會從區域內選取最合適的單一可用區。
- 資料區域性和跨區域輸出:區域性放置會將工作人員分散到所選區域內的可用區。為盡量減少網路延遲,並避免跨區域網路輸出費用,請確保所有資料來源和接收器 (例如 Cloud Storage bucket、BigQuery 資料集和 Pub/Sub 主題) 都與 Dataflow 工作位於同一區域。
Compute Engine 預留項目
- 預留項目親和性:隨選 Dataflow 工作會自動使用符合條件的 Compute Engine 預留項目,這些預留項目會使用
ANY預留項目親和性。不過,「自動選取 VM」功能不支援從特定具名預留項目取用執行個體。 - 適合用於暫時性工作負載:一般來說,不建議將 Compute Engine 預留資源用於容易發生用量暴增、自動調度資源或短期批次工作負載。此外,如果區域短缺問題尚未解決,建立新預留項目時,也會遇到與建立隨選 VM 相同的容量限制。
後續步驟
- 透過自動選取 VM,提升 Dataflow 資源使用率
- Dataflow Shuffle 總覽
- Dataflow Streaming Engine 總覽
- 使用彈性資源排程 (FlexRS)
- 排解資源集區耗盡錯誤
- 排解範本啟動器 VM 資源耗盡問題