串流高可用性

根據預設,Dataflow 串流工作會在單一 Compute Engine 可用區中執行部分後端資源,因此在可用區中斷期間,這些工作容易遺失資料。串流高可用性功能會將 Streaming Engine 工作設為區域性資源,方法是在區域內的多個可用區複製後端狀態。啟用串流高可用性後,單一可用區故障不會導致串流工作停止。

支援與限制

串流高可用性有下列需求和限制:

  • 必須使用 Streaming Engine:工作必須是使用 Streaming Engine 的串流管道。
  • 必須指定區域 worker 位置:Compute Engine worker 必須使用區域位置。如果工作只有特定可用區中的 worker,且該可用區無法使用,則即使後端狀態已複製,工作也無法處理資料,因為 worker 無法使用。因此,啟用串流高可用性時,Dataflow 會拒絕指定特定 worker 可用區 (例如 --workerZone、--worker_zone 或 --zone) 的工作。
  • 只能在建立工作時設定:只有在啟動新工作時,才能啟用串流高可用性。執行就地管道更新時,無法啟用或停用串流高可用性。如要在執行中的管道上變更這項設定,請自動停止並替換更新,或停止或排空管道,然後啟動不含 --update 旗標的新工作。
  • 額外的浮水印延遲時間:啟用串流高可用性時,只有在資料處理完畢並在各可用區複製後,工作的浮水印才會推進。由於浮水印會等待跨可用區複製,因此您可能會發現浮水印會額外延遲幾秒。
  • 必須採用資源型計費:高可用性串流工作一律採用資源型計費,絕不會採用資料處理量型計費。雖然作業採用資源計費,但在預先發布期間,串流高可用性不會產生額外費用;詳情請參閱「價格」一文。

啟用串流高可用性

如要在啟動新的 Dataflow 串流工作時啟用串流高可用性,請設定 requires_high_availability 服務選項。

Java

--dataflowServiceOptions=requires_high_availability

Python

--dataflow_service_options=requires_high_availability

Go

--dataflow_service_options=requires_high_availability

gcloud

使用 gcloud dataflow jobs run 指令執行範本,或使用 gcloud dataflow flex-template run 指令執行 Flex 範本時,請加入 --enable-streaming-engine 和 --additional-experiments 旗標:

--enable-streaming-engine \
--additional-experiments=requires_high_availability

舉例來說,如要執行已啟用串流高可用性的 Flex 範本,請使用下列指令:

gcloud dataflow flex-template run JOB_NAME \
    --project=PROJECT_ID \
    --template-file-gcs-location=TEMPLATE_LOCATION \
    --region=REGION \
    --parameters=KEY_1=VALUE_1,KEY_2=VALUE_2 \
    --enable-streaming-engine \
    --additional-experiments=requires_high_availability

替換下列值:

  • JOB_NAME:Dataflow 工作的名稱
  • PROJECT_ID:您的 Google Cloud 專案 ID
  • TEMPLATE_LOCATION:Flex 範本規格檔案的 Cloud Storage 路徑
  • REGION:執行工作的區域
  • KEY_1=VALUE_1, KEY_2=VALUE_2:Flex 範本的鍵/值參數組合

控制台

如要在 Google Cloud 控制台中執行範本或 Flex 範本時啟用串流高可用性,請按照下列步驟操作:

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

    前往工作

  2. 點選「依據範本建立工作」。

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

  4. 展開「Optional parameters」(選用參數)。

  5. 在「Additional experiments」(其他實驗) 欄位中,輸入 requires_high_availability。

  6. 按一下「Run Job」(執行工作)。

REST

啟動 Flex 範本時,請使用 RuntimeEnvironment 物件或 FlexTemplateRuntimeEnvironment 物件中的 additionalExperiments 欄位:

{
  "additionalExperiments": ["requires_high_availability"]
}

容錯移轉行為

如果發生區域容錯移轉,工作切換至新的主要狀態並在另一個區域建立新的次要副本時,您可能會發現輸送量減少幾秒到幾分鐘。系統會自動執行容錯移轉,不會遺失資料,您無須採取任何行動。您可以使用「監控高可用性」一節所述的指標,追蹤容錯移轉事件。

來源與投資

將 Dataflow 工作設為區域性資源,並不會自動將工作的來源和接收器設為區域性或全域性。區域和全域來源與接收器都適用於高可用性串流,因為兩者都不依賴單一可用區。各來源或接收器的可用性取決於該服務的設定:

  • 許多 Google Cloud 來源和接收器 (例如 Pub/Sub、BigQuery 和 Google Cloud Managed Service for Apache Kafka) 預設提供區域或全域可用性。
  • 如果您使用自訂或自行管理的來源和接收器 (例如自行託管的 Apache Kafka 或 Apache Iceberg),則必須獨立設定及維護其區域可用性。

監控高可用性

您可以使用 dataflow.googleapis.com/job/high_availability_mode 指標,在 Cloud Monitoring 中監控工作的高可用性狀態。這項布林值量測計指標包含 status 標籤,其中 true 代表工作的目前狀態,false 則代表其他狀態。status 標籤可能的值如下:

  • Disabled:這項工作未啟用串流高可用性。
  • Highly Available:串流高可用性已啟用,且後端狀態會跨可用區複製。
  • Establishing High Availability:後端狀態暫時未複製 (例如可用區故障後),但正在建立新的次要副本。

啟用串流高可用性後,只有在資料處理完畢並在可用區之間複製後,標準 Dataflow 水位標記指標才會推進。如要進一步瞭解如何查看指標,請參閱「使用 Monitoring」。

定價

預覽期間,使用串流高可用性不會產生額外費用。

正式發布 (GA) 後,複製作業用量的計費費率與主要狀態用量相同。狀態用量會計入 Streaming Engine 運算單元。

後續步驟