Dataflow 的 Streaming Engine 會將管道執行作業從 worker 虛擬機器 (VM) 移至 Dataflow 服務後端。如果不使用 Streaming Engine 執行串流工作,Dataflow 執行器會完全在 worker VM 上執行串流管道的步驟,並耗用 worker CPU、記憶體和 Persistent Disk 儲存空間。
下列管道預設會啟用 Streaming Engine:
- 使用 Apache Beam Python SDK 2.21.0 以上版本和 Python 3 的串流管道。
- 使用 Apache Beam Go SDK 2.33.0 以上版本的串流管道。
如要進一步瞭解 Streaming Engine 的實作方式,請參閱「Streaming Engine:高度可擴充、低延遲資料處理的執行模型」。
優點
Streaming Engine 模型有下列優點:
- 減少 worker VM 的 CPU、記憶體和 Persistent Disk 儲存空間資源用量。Streaming Engine 最適合搭配 vCPU 數量較少的 worker 機器類型 (例如 2 個 vCPU,而非 4 個 vCPU)。除了小型 worker 開機磁碟外,不需要永久磁碟,因此資源和配額消耗量較少。
- 水平自動調度資源功能反應更靈敏,可因應傳入資料量的變化。Streaming Engine 可更精細地調度 worker 資源。您也可以設定延遲時間級別,調整自動配置器對待處理時間長度的敏感度。
- 支援能力更佳,因為您不必重新部署管道,即可套用服務更新。
worker 資源減少的主要原因,是將工作卸載至 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,而您想使用 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 處理串流管道,請指定下列參數:
- 如果您使用的是 Java 適用的 Apache Beam SDK 2.11.0 以上版本,請使用
--enableStreamingEngine。 - 如果您使用的是 Java 版 Apache Beam SDK 2.10.0,請使用
--experiments=enable_streaming_engine。
如果使用 Dataflow Streaming Engine 處理管道,請勿指定 --zone 參數。請改為指定 --region 參數,並將值設為支援的地區。Dataflow 會自動選取您指定區域中的可用區。如果您指定 --zone 參數,並將其設為可用區域以外的可用區,Dataflow 會回報錯誤。
Streaming Engine 最適合搭配 vCPU 數量較少的工作站機器類型。請根據工作類型,判斷是否要使用高記憶體 worker 機型。我們建議的機型範例包括 2 個 vCPU 機型,例如 --workerMachineType=n4-standard-2 或 --workerMachineType=n4-highmem-2。您也可以設定 --diskSizeGb=30,因為 Streaming Engine 只需要 worker 開機映像檔和本機記錄檔的空間。這些值是預設值。
Python
Streaming Engine 須使用 Apache Beam Python SDK 2.16.0 以上版本。
如果符合下列條件,新的 Dataflow 串流管道預設會啟用 Streaming Engine:
- 管道使用 Apache Beam Python SDK 2.21.0 以上版本和 Python 3。
- 不使用客戶自行管理的加密金鑰。
- Dataflow worker 與 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 最適合搭配 vCPU 數量較少的工作站機器類型。請根據工作類型,判斷是否要使用高記憶體 worker 機型。我們建議的機型範例包括 2 個 vCPU 機型,例如 --workerMachineType=n4-standard-2 或 --workerMachineType=n4-highmem-2。您也可以設定 --disk_size_gb=30,因為 Streaming Engine 只需要 worker 開機映像檔和本機記錄檔的空間。這些值是預設值。
Go
Streaming Engine 須使用 Apache Beam Go SDK 2.33.0 以上版本。
根據預設,使用 Apache Beam Go SDK 的新 Dataflow 串流管道會啟用 Streaming Engine。
如要停用 Go 串流管道中的 Streaming Engine,請指定下列參數。每次要停用 Streaming Engine 時,都必須指定這項參數。
--experiments=disable_streaming_engine
如果您在管道中使用 Dataflow Streaming Engine,請勿指定 --zone 參數。請改為指定 --region 參數,並將值設為支援的地區。Dataflow 會自動選取您指定區域中的可用區。如果您指定 --zone 參數,並將其設為可用區域以外的區域,Dataflow 會回報錯誤。
Streaming Engine 最適合搭配 vCPU 數量較少的工作站機器類型。請根據工作類型,判斷是否要使用高記憶體 worker 機型。我們建議的機型範例包括 2 個 vCPU 機型,例如 --workerMachineType=n4-standard-2 或 --workerMachineType=n4-highmem-2。您也可以設定 --disk_size_gb=30,因為 Streaming Engine 只需要 worker 開機映像檔和本機記錄檔的空間。這些值是預設值。
gcloud CLI
使用 gcloud dataflow jobs run 指令或 gcloud dataflow flex-template run 指令執行管道時,請使用下列旗標啟用 Streaming Engine:
--enable-streaming-engine
如要停用 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 資源。您需要支付 worker CPU、worker 記憶體和 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 監控介面中選取工作。如果工作採用資源計費模式,「Job info」(工作資訊) 側邊面板會顯示「Streaming Engine Compute Units」(Streaming Engine 運算單元) 欄位。
如有帳單相關問題,請與 Cloud Customer Care 聯絡。