使用 Dataflow 快照

Dataflow 快照會儲存串流管道的狀態,方便您啟動新版 Dataflow 工作,而不會失去狀態。快照適合用於備份和復原、測試及復原串流管道更新,以及其他類似的情境。

您可以為任何執行中的串流工作建立 Dataflow 快照。 請注意,您從快照建立的任何新工作都會使用 Streaming Engine。您也可以使用 Dataflow 快照,將現有管道遷移至更有效率且可擴充的 Streaming Engine,停機時間極短。

本指南說明如何建立及管理快照,以及如何從快照建立工作。

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.

    Enable the APIs

  8. 建立快照

    控制台

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

      前往「Jobs」(工作) 頁面

      畫面上會顯示 Dataflow 工作清單,清單中也會顯示工作的狀態。 如未顯示任何串流工作,請執行新的串流工作。如需串流工作範例,請參閱使用範本快速入門導覽課程

    2. 選取職務。
    3. 在「工作詳細資料」頁面的選單列中,按一下「建立快照」
    4. 在「建立快照」對話方塊中,選取下列其中一個選項:
      • 不含資料來源:選取這個選項,即可只建立 Dataflow 工作狀態的快照。
      • 連同資料來源:選取這個選項,即可建立 Dataflow 工作狀態的快照,以及 Pub/Sub 來源的快照。
    5. 點選「建立」

    gcloud

    建立快照:

    gcloud dataflow snapshots create \
        --job-id=JOB_ID \
        --snapshot-ttl=DURATION \
        --snapshot-sources=true \
        --region=REGION

    更改下列內容:

    • JOB_ID:串流作業 ID
    • DURATION:快照到期前的時間量 (以天為單位),到期後就無法再從快照建立工作。snapshot-ttl 旗標為選用項目,因此如未指定,快照會在 7 天後過期。請按照 5d 格式指定值。您指定的最長期限為 30 天 (30d)。
    • REGION:串流作業的執行區域

    snapshot-sources 標記會指定是否要連同 Dataflow 快照,一併建立 Pub/Sub 來源的快照。如果 true,系統會自動為 Pub/Sub 來源建立快照,並在輸出回應中顯示 Pub/Sub 快照 ID。執行 create 指令後,請執行 listdescribe 指令,檢查快照狀態。

    建立 Dataflow 快照時,請注意下列事項:

    • Dataflow 快照會產生磁碟用量費用。
    • 快照會建立在與工作相同的區域。
    • 如果工作站位置與工作區域不同,快照建立作業就會失敗。請參閱「Dataflow 地區」指南。
    • 只有在 2021 年 2 月 1 日後啟動或更新非 Streaming Engine 工作,才能為這類工作建立快照。
    • 使用 Dataflow 快照建立的 Pub/Sub 快照由 Pub/Sub 服務管理,並產生費用
    • Pub/Sub 快照的有效期限最長為 7 天。確切生命週期取決於建立時來源訂閱項目中的現有待處理項目。具體來說,Pub/Sub 快照的生命週期為 7 days - (age of oldest unacked message in the subscription)。舉例來說,假設訂閱項目最舊的未確認訊息已存在 3 天,如果從這個訂閱項目建立 Pub/Sub 快照,只要快照存在,就會一律擷取這個 3 天前的待處理工作,並在 4 天後過期。請參閱 Pub/Sub 快照 參考資料
    • 在快照作業期間,Dataflow 工作會暫停,並在快照準備就緒後繼續執行。所需時間取決於管道狀態的大小。舉例來說,在 Streaming Engine 工作中建立快照所需的時間,通常比非 Streaming Engine 工作短。
    • 您可以在快照建立期間取消工作,系統就會取消快照。
    • 快照作業進行期間,您無法更新排空工作。您必須等到工作從快照程序恢復後,才能更新或排空工作。

    使用快照頁面

    建立快照後,您可以使用Google Cloud 控制台的「快照」頁面,查看及管理專案的快照。

    按一下快照即可開啟「快照詳細資料」頁面。您可以查看快照的其他中繼資料,以及來源工作和任何 Pub/Sub 快照的連結。

    Dataflow 快照詳細資料頁面,可取得快照的詳細資訊。

    刪除快照

    刪除快照可停止快照程序,並繼續執行工作。此外,刪除 Dataflow 快照時,系統不會自動刪除相關聯的 Pub/Sub 快照。

    控制台

    1. 在 Google Cloud 控制台中,前往 Dataflow 的「Snapshots」(快照) 頁面。

      前往「快照」

    2. 選取快照,然後按一下「刪除」
    3. 在「Delete snapshot」(刪除快照) 對話方塊中,按一下「Delete」(刪除) 即可確認。

    gcloud

    刪除快照:

    gcloud dataflow snapshots delete SNAPSHOT_ID \
        --region=REGION

    更改下列內容:

    • SNAPSHOT_ID:快照 ID
    • REGION:快照所在的區域

    詳情請參閱 delete 指令參考資料。

    從快照建立工作

    建立快照後,您可以從該快照建立新工作,還原 Dataflow 工作狀態。

    Java

    如要從快照建立新工作,請同時使用 --createFromSnapshot--enableStreamingEngine 旗標。

    • 在殼層或終端機中,從快照建立新工作。例如:
      mvn -Pdataflow-runner compile exec:java \
          -Dexec.mainClass=MAIN_CLASS \
          -Dexec.args="--project=PROJECT_ID \
          --stagingLocation=gs://STORAGE_BUCKET/staging/ \
          --inputFile=gs://apache-beam-samples/shakespeare/* \
          --output=gs://STORAGE_BUCKET/output \
          --runner=DataflowRunner \
          --enableStreamingEngine \
          --createFromSnapshot=SNAPSHOT_ID \
          --region=REGION"

      更改下列內容:

      • MAIN_CLASSMODULE: 適用於 Java pipeline,其中包含 pipeline 程式碼的主要類別位置。 如果是 Python 管道,則為包含管道程式碼的模組位置。舉例來說,使用 Wordcount 範例時,值為 org.apache.beam.examples.WordCount
      • PROJECT_ID:您的 Google Cloud 專案 ID
      • STORAGE_BUCKET:用於暫存工作資產和最終輸出的 Cloud Storage bucket
      • SNAPSHOT_ID:您要用來建立新作業的快照 ID
      • REGION:您要執行新 Dataflow 工作的位置

    Python

    如要使用 Dataflow 快照,必須使用 Python 適用的 Apache Beam SDK 2.29.0 以上版本。

    如要從快照建立新工作,請同時使用 --createFromSnapshot--enableStreamingEngine 旗標。

    • 在殼層或終端機中,從快照建立新工作。例如:
      python -m MODULE \
          --project PROJECT_ID \
          --temp_location gs://STORAGE_BUCKET/tmp/ \
          --input gs://apache-beam-samples/shakespeare/* \
          --output gs://STORAGE_BUCKET/output \
          --runner DataflowRunner \
          --enable_streaming_engine \
          --create_from_snapshot=SNAPSHOT_ID \
          --region REGION \
          --streaming

      更改下列內容:

      • MAIN_CLASSMODULE: 適用於 Java pipeline,其中包含 pipeline 程式碼的主要類別位置。 如果是 Python 管道,則為包含管道程式碼的模組位置。舉例來說,使用 Wordcount 範例時,值為 org.apache.beam.examples.WordCount
      • PROJECT_ID:您的 Google Cloud 專案 ID
      • STORAGE_BUCKET:用於暫存工作資產和最終輸出的 Cloud Storage bucket
      • SNAPSHOT_ID:您要用來建立新作業的快照 ID
      • REGION:您要執行新 Dataflow 工作的位置

    從 Dataflow 快照建立工作時,請注意下列事項:

    • 從快照建立的工作必須在快照儲存的相同區域中執行。
    • 如果 Dataflow 快照包含 Pub/Sub 來源的快照,從 Dataflow 快照建立的工作會自動seek這些 Pub/Sub 快照做為來源。從該 Dataflow 快照建立工作時,您必須指定來源工作使用的相同 Pub/Sub 主題。

    • 如果 Dataflow 快照未包含 Pub/Sub 來源的快照,且來源工作使用 Pub/Sub 來源,您必須從該 Dataflow 快照建立工作時指定 Pub/Sub 主題。

    • 從快照建立的新工作仍須通過更新相容性檢查

    已知限制

    Dataflow 快照有下列限制:

    • 您無法使用範本或 Dataflow SQL 編輯器,從快照建立工作。
    • 快照建立期間,您無法更新或排除工作。您必須等到工作從快照程序恢復後,才能更新或排空工作。
    • 快照到期時間範圍只能透過 Google Cloud CLI 設定。
    • 不支援接收器快照。舉例來說,建立 Dataflow 快照時,您無法建立 BigQuery 快照。

    疑難排解

    如果您在與 Dataflow 快照互動時遇到問題,本節提供了疑難排解常見問題的操作說明。

    聯絡支援團隊前,請先確認您已排除已知限制和下列疑難排解章節中的相關問題。

    快照建立要求遭拒

    透過Google Cloud 控制台或 gcloud CLI 提交快照建立要求後,Dataflow 服務會執行前提條件檢查,並傳回任何錯誤訊息。系統可能會基於各種原因拒絕建立快照的要求,並在錯誤訊息中說明原因,例如不支援的工作類型或無法使用的區域。

    如果要求遭拒是因為工作過舊,您必須先更新工作,才能要求快照。

    無法建立快照

    快照建立作業可能會因多種原因而失敗。舉例來說,來源工作已取消,或是專案沒有建立 Pub/Sub 快照的正確權限。作業的 job-message 記錄包含快照建立作業的錯誤訊息。如果快照建立失敗,來源工作就會繼續執行。

    無法從快照建立工作

    從快照建立工作時,請確認快照存在且未過期。新工作必須在 Streaming Engine 上執行。

    如要瞭解常見的工作建立問題,請參閱 Dataflow 疑難排解指南。具體來說,從快照建立的新工作會接受更新相容性檢查,新工作必須與快照來源工作相容。

    從快照建立的工作進度緩慢

    工作的 job-message 記錄包含工作建立的錯誤訊息。舉例來說,您可能會發現作業找不到 Pub/Sub 快照。在這種情況下,請確認 Pub/Sub 快照存在且未過期。如果快照中最舊的訊息超過七天,Pub/Sub 快照就會過期。過期的 Pub/Sub 快照可能會由 Pub/Sub 服務自動移除。

    如果是從包含 Pub/Sub 來源快照的 Dataflow 快照建立工作,新工作可能會有大量 Pub/Sub 待處理項目。串流 自動調整規模 可能會有助於新工作更快清除待處理項目。

    建立快照前,來源工作可能已處於不正常的狀態。瞭解來源作業為何不正常,可能有助於解決新作業的問題。如需常見的工作偵錯提示,請參閱 Dataflow 疑難排解指南