設定管道串流模式

Dataflow 支援兩種串流工作模式:

  • 僅處理一次模式。所有 Dataflow 串流工作都預設採用這個模式。在此模式下,Dataflow 會確保資料在管道中移動時,不會捨棄或重複記錄。
  • 至少傳送一次模式。這個模式可確保記錄至少會處理一次 (也就是不會遺失任何輸入記錄)。不過,這個模式可能會產生重複記錄。如果應用情境可容許重複資料,至少一次模式可大幅降低工作成本和延遲時間。

選擇要使用的串流模式

如要確保管道提供準確的結果和可預測的語意,請選擇「僅限一次」模式。例如:

  • 含有匯總的管道,例如計數、總和或平均值。
  • 業務關鍵用途,這類用途需要系統處理記錄一次,且只能處理一次。例如詐欺偵測、網路威脅偵測和電子商務庫存資訊主頁。

如果工作負載可容許重複記錄,且可能因降低成本或延遲時間而受益,請選擇「至少一次」串流模式。例如:

  • 工作負載,其中重複資料刪除作業是在 Dataflow 的下游執行。例如,寫入 BigQuery 或 SQL 資料存放區的管道。
  • 只有對應的管道,沒有任何匯總。例如記錄處理、變更資料擷取,或擷取、轉換及載入 (ETL) 工作,其中管道只會執行每個元素的轉換,例如結構定義轉換。
  • 輸出接收器無法保證只會傳送一次的管道,例如 Pub/Sub。在這種情況下,管道的重複資料刪除作業可能就不必要,而且您可享有「至少一次」串流模式的成本和延遲時間減少優勢。
  • 從 Pub/Sub 讀取的管道。使用「至少一次」模式時,從 Pub/Sub 讀取資料的作業會大幅最佳化。

其他事項

  • 至少一次模式可大幅降低管道的成本和延遲時間。實際影響取決於管道的具體情況。請在實際負載下測試「至少一次」串流,評估影響。

  • 使用「至少一次」模式時,重複記錄的比例取決於重試次數。通常基準率很低 (低於 1%)。不過,如果工作節點發生故障,或因其他情況導致重複的 RPC 呼叫,就可能會出現尖峰。

  • 串流模式會影響 Streaming Engine 處理記錄的方式,但不會變更 I/O 連接器的語意。建議您讓 I/O 語意與串流模式保持一致。舉例來說,如果您搭配使用BigQuery I/O 連接器和至少一次串流模式,請將寫入模式設為 STORAGE_API_AT_LEAST_ONCE。使用「至少一次」串流時,Google 提供的 Dataflow 範本會自動啟用這個選項。

  • 元素層級的轉換 (例如 Map) 不一定會是等冪。舉例來說,假設有個函式會接收訊息,並在訊息中附加目前的時間戳記。在這種情況下,重複的記錄可能會產生多個不同的輸出內容。「至少一次」模式可能不適合該管道。

設定串流模式

所有 Dataflow 工作預設都會啟用「只處理一次」功能。如要啟用「至少一次」串流模式,請設定 streaming_mode_at_least_once service 選項

Java

--dataflowServiceOptions=streaming_mode_at_least_once

Python

--dataflow_service_options=streaming_mode_at_least_once

Go

--dataflow_service_options=streaming_mode_at_least_once

如未指定 streaming_mode_at_least_once 選項,Dataflow 會使用「精確一次」串流模式。

如果您設定 streaming_mode_at_least_once 選項,Dataflow 會自動啟用 Streaming Engine以資源為基礎的計費

如要更新執行中工作的串流模式,請啟動替代工作

選取範本的串流模式

如要在執行 Dataflow 串流範本時選取串流模式,請按照下列步驟操作:

主控台

  1. 前往 Google Cloud 控制台的 Dataflow「Jobs」(工作) 頁面。

    前往「Jobs」(工作) 頁面

  2. 按一下 [Create job from template] (利用範本建立工作)

  3. 從「Dataflow template」(Dataflow 範本) 下拉式選單中,選取要執行的範本。

  4. 在「串流模式」中,選取串流模式。如果範本只支援一種模式,這個選項就會停用。

gcloud

如要啟用「至少一次」模式,請在 additional-experiments 旗標中設定 streaming_mode_at_least_once 選項:

--additional-experiments=streaming_mode_at_least_once

如要啟用「只傳送一次」模式,請在 additional-experiments 旗標中設定 streaming_mode_exactly_once 選項:

--additional-experiments=streaming_mode_exactly_once

這兩個選項互斥。如未設定其中一個選項,範本預設會採用由範本中繼資料決定的串流模式。詳情請參閱「自訂範本」。

REST

FlexTemplateRuntimeEnvironment (Flex 範本) 或 RuntimeEnvironment (傳統範本) 物件中使用 additionalExperiments 欄位。

{
  additionalExperiments : ["streaming_mode_at_least_once"]
  ...
}

自訂範本

如果您建立的自訂範本支援「至少一次」處理作業,請在範本中繼資料檔案中新增下列頂層欄位:

{
  "streaming": true,
  "supportsAtLeastOnce": true,
  "supportsExactlyOnce": true,
  "defaultStreamingMode": "AT_LEAST_ONCE"
}

使用者在 Google Cloud 控制台中部署範本時,可以透過這些中繼資料欄位選取串流模式。defaultStreamingMode 欄位為選用欄位,可指定範本的預設串流模式。如果未指定 defaultStreamingMode,且範本同時支援這兩種模式,則預設為「僅一次」模式。

詳情請參閱 Dataflow 範本說明文件中的下列章節:

查看工作的串流模式

如要查看工作串流模式,請前往Google Cloud 控制台的「Jobs」頁面。

前往「Jobs」(工作) 頁面

工作詳細資料頁面的「Job info」(工作資訊) 面板也會列出串流模式。

限制

「至少一次」串流模式需要搭配Streaming Engine以資源為基礎的計費方式

定價

至少一次模式一律採用資源計費,也就是根據工作耗用的資源總數計費。

無論串流模式為何,Streaming Engine 運算單元的單位成本都相同。不過在大多數情況下,使用「至少一次」模式時,管道消耗的總資源會大幅減少。

後續步驟