Dataflow 快照會儲存串流管道的狀態,方便您啟動新版 Dataflow 工作,而不會失去狀態。快照適合用於備份和復原、測試及復原串流管道更新,以及其他類似的情境。
您可以為任何執行中的串流工作建立 Dataflow 快照。 請注意,您從快照建立的任何新工作都會使用 Streaming Engine。您也可以使用 Dataflow 快照,將現有管道遷移至更有效率且可擴充的 Streaming Engine,停機時間極短。
本指南說明如何建立及管理快照,以及如何從快照建立工作。
事前準備
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.
- 前往 Google Cloud 控制台的 Dataflow「Jobs」(工作) 頁面。
畫面上會顯示 Dataflow 工作清單,清單中也會顯示工作的狀態。 如未顯示任何串流工作,請執行新的串流工作。如需串流工作範例,請參閱使用範本快速入門導覽課程。
- 選取職務。
- 在「工作詳細資料」頁面的選單列中,按一下「建立快照」。
- 在「建立快照」對話方塊中,選取下列其中一個選項:
- 不含資料來源:選取這個選項,即可只建立 Dataflow 工作狀態的快照。
- 連同資料來源:選取這個選項,即可建立 Dataflow 工作狀態的快照,以及 Pub/Sub 來源的快照。
- 點選「建立」。
JOB_ID
:串流作業 IDDURATION
:快照到期前的時間量 (以天為單位),到期後就無法再從快照建立工作。snapshot-ttl
旗標為選用項目,因此如未指定,快照會在 7 天後過期。請按照5d
格式指定值。您指定的最長期限為 30 天 (30d
)。REGION
:串流作業的執行區域- 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 控制台中,前往 Dataflow 的「Snapshots」(快照) 頁面。
- 選取快照,然後按一下「刪除」。
- 在「Delete snapshot」(刪除快照) 對話方塊中,按一下「Delete」(刪除) 即可確認。
SNAPSHOT_ID
:快照 IDREGION
:快照所在的區域- 在殼層或終端機中,從快照建立新工作。例如:
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_CLASS
或MODULE
: 適用於 Java pipeline,其中包含 pipeline 程式碼的主要類別位置。 如果是 Python 管道,則為包含管道程式碼的模組位置。舉例來說,使用 Wordcount 範例時,值為org.apache.beam.examples.WordCount
。PROJECT_ID
:您的 Google Cloud 專案 IDSTORAGE_BUCKET
:用於暫存工作資產和最終輸出的 Cloud Storage bucketSNAPSHOT_ID
:您要用來建立新作業的快照 IDREGION
:您要執行新 Dataflow 工作的位置
- 在殼層或終端機中,從快照建立新工作。例如:
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_CLASS
或MODULE
: 適用於 Java pipeline,其中包含 pipeline 程式碼的主要類別位置。 如果是 Python 管道,則為包含管道程式碼的模組位置。舉例來說,使用 Wordcount 範例時,值為org.apache.beam.examples.WordCount
。PROJECT_ID
:您的 Google Cloud 專案 IDSTORAGE_BUCKET
:用於暫存工作資產和最終輸出的 Cloud Storage bucketSNAPSHOT_ID
:您要用來建立新作業的快照 IDREGION
:您要執行新 Dataflow 工作的位置
- 從快照建立的工作必須在快照儲存的相同區域中執行。
如果 Dataflow 快照包含 Pub/Sub 來源的快照,從 Dataflow 快照建立的工作會自動
seek
這些 Pub/Sub 快照做為來源。從該 Dataflow 快照建立工作時,您必須指定來源工作使用的相同 Pub/Sub 主題。如果 Dataflow 快照未包含 Pub/Sub 來源的快照,且來源工作使用 Pub/Sub 來源,您必須從該 Dataflow 快照建立工作時指定 Pub/Sub 主題。
從快照建立的新工作仍須通過更新相容性檢查。
- 您無法使用範本或 Dataflow SQL 編輯器,從快照建立工作。
- 快照建立期間,您無法更新或排除工作。您必須等到工作從快照程序恢復後,才能更新或排空工作。
- 快照到期時間範圍只能透過 Google Cloud CLI 設定。
- 不支援接收器快照。舉例來說,建立 Dataflow 快照時,您無法建立 BigQuery 快照。
建立快照
控制台
gcloud
建立快照:
gcloud dataflow snapshots create \ --job-id=JOB_ID \ --snapshot-ttl=DURATION \ --snapshot-sources=true \ --region=REGION
更改下列內容:
snapshot-sources
標記會指定是否要連同 Dataflow 快照,一併建立 Pub/Sub 來源的快照。如果 true
,系統會自動為 Pub/Sub 來源建立快照,並在輸出回應中顯示 Pub/Sub 快照 ID。執行 create
指令後,請執行 list
或 describe
指令,檢查快照狀態。
建立 Dataflow 快照時,請注意下列事項:
使用快照頁面
建立快照後,您可以使用Google Cloud 控制台的「快照」頁面,查看及管理專案的快照。
按一下快照即可開啟「快照詳細資料」頁面。您可以查看快照的其他中繼資料,以及來源工作和任何 Pub/Sub 快照的連結。
刪除快照
刪除快照可停止快照程序,並繼續執行工作。此外,刪除 Dataflow 快照時,系統不會自動刪除相關聯的 Pub/Sub 快照。
控制台
gcloud
刪除快照:
gcloud dataflow snapshots delete SNAPSHOT_ID \ --region=REGION
更改下列內容:
詳情請參閱 delete
指令參考資料。
從快照建立工作
建立快照後,您可以從該快照建立新工作,還原 Dataflow 工作狀態。
Java
如要從快照建立新工作,請同時使用 --createFromSnapshot
和 --enableStreamingEngine
旗標。
Python
如要使用 Dataflow 快照,必須使用 Python 適用的 Apache Beam SDK 2.29.0 以上版本。
如要從快照建立新工作,請同時使用 --createFromSnapshot
和 --enableStreamingEngine
旗標。
從 Dataflow 快照建立工作時,請注意下列事項:
已知限制
Dataflow 快照有下列限制:
疑難排解
如果您在與 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 疑難排解指南。