Dataflow 的 Streaming Engine 會將管道執行作業從工作站虛擬機器 (VM) 移至 Dataflow 服務後端。如果串流作業未使用 Streaming Engine,Dataflow 執行器會完全在工作站 VM 上執行串流管道的步驟,並耗用工作站的 CPU、記憶體和永久磁碟儲存空間。
下列管道預設會啟用 Streaming Engine:
- 使用 Apache Beam Python SDK 2.21.0 以上版本和 Python 3 的串流管道。
- 使用 Apache Beam Go SDK 2.33.0 以上版本的串流管道。
如要進一步瞭解 Streaming Engine 的實作方式,請參閱「Streaming Engine:適用於高延展性低延遲資料處理的執行模型」。
優點
Streaming Engine 模型有下列優點:
- 減少工作站 VM 的 CPU、記憶體和永久磁碟儲存空間資源用量。Streaming Engine 最適合搭配小型的工作站機器類型 (
n1-standard-2
,而非n1-standard-4
) 使用,並且除了小型工作站開機磁碟以外,不需要用到永久磁碟,因此能減少耗用的資源與配額。 - 水平自動調度資源功能的回應能力更強,可以輕鬆因應傳入資料量的變動;Streaming Engine 能讓工作站的資源調度更順暢、更精準。
- 更好的支援能力;您不需要為了套用服務更新而重新部署管道。
使用的工作站資源量之所以能減少,多數情況是因為工作負載移到了 Dataflow 服務;因此,使用 Streaming Engine 需要支付相關費用。
支援與限制
- 如果是 Java SDK,Streaming Engine 必須搭配使用 Apache Beam SDK 2.10.0 以上版本。
- 如果是 Python SDK,Streaming Engine 必須使用 Apache Beam SDK 2.16.0 以上版本。
- 如果是 Go SDK,Streaming Engine 需使用 Apache Beam SDK 2.33.0 以上版本。
- 您無法更新管道,讓執行中的管道使用 Streaming Engine。如果管道在實際工作環境中執行時未使用 Streaming Engine,而您想使用這項功能,請使用 Dataflow 「Drain」(排除) 選項停止管道。然後,再指定 Streaming Engine 參數,並重新執行管道。
- 對於使用 Streaming Engine 的工作,開放式視窗的匯總輸入資料量上限為每個鍵 60 GB。匯總輸入資料包括緩衝元素和自訂狀態。如果管道超過此限制,管道就會停滯,系統延遲時間會很長,且工作記錄中的訊息會指出已超過限制。最佳做法是避免管道設計導致索引鍵過大。詳情請參閱「撰寫 Dataflow 管道時考量擴充性」。
- 支援客戶自行管理的加密金鑰 (CMEK)
使用 Streaming Engine
這項功能適用於所有支援 Dataflow 的區域。如要查看適用的位置,請參閱 Dataflow 位置。
Java
Streaming Engine 需要 Apache Beam Java SDK 2.10.0 以上版本。
如要將 Streaming Engine 用於串流管道,請指定下列參數:
--enableStreamingEngine
,如您使用的是 Java 適用的 Apache Beam SDK 2.11.0 以上版本。--experiments=enable_streaming_engine
,如您使用的是 Java 適用的 Apache Beam SDK 2.10.0 版本。
如果管道使用 Dataflow Streaming Engine,請勿指定 --zone
參數。請改為指定 --region
參數,並將值設為支援的地區。Dataflow 會自動選取指定地區中的區域。如果您指定了 --zone
參數,並將其設定為可用地區以外的區域,Dataflow 會報告錯誤。
Streaming Engine 最適合搭配小型核心工作站機器類型使用。使用工作類型判斷是否要使用高記憶體工作站機器類型。我們建議的機器類型包括 --workerMachineType=n1-standard-2
和 --workerMachineType=n1-highmem-2
。您也可以設定 --diskSizeGb=30
,因為 Streaming Engine 僅需要存放工作站開機映像檔和本機記錄檔的空間。這些值都是預設值。
Python
Streaming Engine 需使用 Apache Beam Python SDK 2.16.0 以上版本。
如果符合下列條件,系統會為新的 Dataflow 串流管道預設啟用 Streaming Engine:
- 管道使用 Apache Beam Python SDK 2.21.0 以上版本和 Python 3。
- 不使用客戶自行管理的加密金鑰。
- Dataflow 工作站與 Dataflow 工作位於相同地區。
在 Python SDK 2.45.0 以上版本中,您無法停用串流管道的 Streaming Engine。在 Python SDK 2.44.0 版或更早版本中,如要停用 Streaming Engine,請指定下列參數:
--experiments=disable_streaming_engine
如果您使用 Python 2,請指定下列參數來啟用 Streaming Engine:
--enable_streaming_engine
如要在管道中使用 Dataflow Streaming Engine,請勿指定 --zone
參數。請改為指定 --region
參數,並將值設為支援的地區。Dataflow 會自動選取指定地區中的區域。如果您指定 --zone
參數,並將其設定為可用地區以外的區域,Dataflow 會報告錯誤。
Streaming Engine 最適合搭配小型核心工作站機器類型使用。使用工作類型判斷是否要使用高記憶體工作站機器類型。我們建議的機器類型包括 --workerMachineType=n1-standard-2
和 --workerMachineType=n1-highmem-2
。您也可以設定 --disk_size_gb=30
,因為 Streaming Engine 僅需要存放工作站開機映像檔和本機記錄檔的空間。這些值都是預設值。
Go
Streaming Engine 需要 Apache Beam Go SDK 2.33.0 以上版本。
對於使用 Apache Beam Go SDK 的新 Dataflow 串流管道,系統預設會啟用串流引擎。
如要在 Go 串流管道中停用 Streaming Engine,請指定下列參數。每次要停用 Streaming Engine 時,都必須指定這項參數。
--experiments=disable_streaming_engine
如要在管道中使用 Dataflow Streaming Engine,請勿指定 --zone
參數。請改為指定 --region
參數,並將值設為支援的地區。Dataflow 會自動選取指定地區中的區域。如果您指定 --zone
參數,並將其設定為可用地區以外的區域,Dataflow 會報告錯誤。
Streaming Engine 最適合搭配小型核心工作站機器類型使用。使用工作類型判斷是否要使用高記憶體工作站機器類型。我們建議的機器類型包括 --workerMachineType=n1-standard-2
和 --workerMachineType=n1-highmem-2
。您也可以設定 --disk_size_gb=30
,因為 Streaming Engine 僅需要存放工作站開機映像檔和本機記錄檔的空間。這些值都是預設值。
gcloud CLI
使用 gcloud dataflow jobs run
或 gcloud dataflow flex-template run
指令執行管道時,如要啟用 Streaming Engine,請使用下列旗標:
--enable-streaming-engine
如要停用串流引擎,請使用下列標記:
--additional-experiments=disable_streaming_engine
REST
使用 REST API 中的 projects.locations.jobs.create
方法執行管道時,請使用 Job
資源啟用或停用 Streaming Engine。如要啟用 Streaming Engine,請在 environment
下方將 experiments
欄位設為 enable_streaming_engine
:
"environment": {
"experiments": "enable_streaming_engine"
}
如要停用 Streaming Engine,請在 environment
下方將 experiments
欄位設為 disable_streaming_engine
:
"environment": {
"experiments": "disable_streaming_engine"
}
定價
Dataflow Streaming Engine 採用資源計費模式,系統會根據工作耗用的資源總數向您收費。採用資源用量計費時,系統會以Streaming Engine 運算單元為單位,計算工作耗用的 Streaming Engine 資源。系統會針對工作站 CPU、工作站記憶體和 Streaming Engine 計算單元向您收費。
使用以資源為準的計費方式
如要使用以資源為準的計費方式,請在啟動或更新工作時,加入下列 Dataflow 服務選項。
Java
--dataflowServiceOptions=enable_streaming_engine_resource_based_billing
Python
--dataflow_service_options=enable_streaming_engine_resource_based_billing
Go
--dataflow_service_options=enable_streaming_engine_resource_based_billing
資料處理帳單 (舊版)
除非啟用以資源為準的計費方式,否則系統會採用舊版資料處理計費方式,為您的工作計費。
驗證帳單模式
除非您使用 Dataflow Prime,否則當您有使用資源計費的工作時,帳單會包含 SKU Streaming Engine Compute Unit
。如果工作使用資料處理計費,帳單會包含 SKU Streaming Engine data processed
。如果部分工作採用資源用量計費,其他工作則採用資料處理量計費,帳單會列出這兩種 SKU。
使用 Dataflow Prime 時,如果採用以資源為準的計費方式,系統會使用資料運算單元 (DCU) SKU。
如要查看工作使用的定價模式,請在 Dataflow 監控介面中選取工作。如果工作採用資源計費,則「工作資訊」側邊面板會顯示「Streaming Engine 運算單元」欄位。
如對帳單有任何疑問,請與 Cloud Customer Care 聯絡。