Dataflow 快照保存了流处理流水线的状态,让您可以在不丢失状态的情况下启动 Dataflow 作业的新版本。快照对于备份和恢复、对流式流水线的测试和回滚更新以及其他类似场景很有用。
您可以创建任何正在运行的流处理作业的 Dataflow 快照。请注意,您通过快照创建的任何新作业都使用 Streaming Engine。您还可以使用 Dataflow 快照将现有流水线迁移到效率更高的、可扩缩的 Streaming Engine 中,并且将停机时间缩至最短。
本指南介绍如何创建快照、管理快照以及通过快照创建作业。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
创建快照
控制台
gcloud
创建快照:
gcloud dataflow snapshots create \
--job-id=JOB_ID \
--snapshot-ttl=DURATION \
--snapshot-sources=true \
--region=REGION请替换以下内容:
JOB_ID:您的流式作业 IDDURATION:快照到期之前的时长(以天为单位);快照到期后,您无法通过快照创建更多作业。snapshot-ttl标志是可选的,因此如果未指定,快照将在 7 天后过期。请按以下格式指定值:5d。可指定的最长时长为 30 天 (30d)。REGION:作业运行的区域
snapshot-sources 标志指定是否随 Dataflow 快照一起为 Pub/Sub 源截取快照。如果为 true,则系统会自动为 Pub/Sub 源截取快照,并且输出响应中会显示 Pub/Sub 快照 ID。运行 create 命令后,通过运行 list 或 describe 命令检查快照状态。
创建 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 快照不会自动删除关联的 Pub/Sub 快照。
控制台
- 在 Google Cloud 控制台中,前往 Dataflow 快照页面。
- 选择快照,然后点击删除。
- 在删除快照对话框中,点击删除进行确认。
gcloud
删除快照:
gcloud dataflow snapshots delete SNAPSHOT_ID \
--region=REGION请替换以下内容:
SNAPSHOT_ID:您的快照 IDREGION:您的快照所在的区域
如需了解详情,请参阅 delete 命令参考。
从快照创建作业
创建快照后,可以通过从该快照创建新作业来恢复 Dataflow 作业的状态。
Java
如需从快照创建新作业,请同时使用 --createFromSnapshot 和 --enableStreamingEngine 标志。
- 在您的 shell 或终端中,通过快照创建新作业。例如:
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 流水线,这是包含流水线代码的主类的位置。对于 Python 流水线,这是包含流水线代码的模块的位置。例如,使用 Wordcount 示例时,值为org.apache.beam.examples.WordCount。PROJECT_ID:您的 Google Cloud 项目 IDSTORAGE_BUCKET:用于临时作业资产和最终输出的 Cloud Storage 存储桶SNAPSHOT_ID:要通过其创建新作业的快照的 IDREGION:要运行新 Dataflow 作业的位置
Python
Dataflow 快照需要 Python 版 Apache Beam SDK 2.29.0 版或更高版本。
如需从快照创建新作业,请同时使用 --createFromSnapshot 和 --enableStreamingEngine 标志。
- 在您的 shell 或终端中,通过快照创建新作业。例如:
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 流水线,这是包含流水线代码的主类的位置。对于 Python 流水线,这是包含流水线代码的模块的位置。例如,使用 Wordcount 示例时,值为org.apache.beam.examples.WordCount。PROJECT_ID:您的 Google Cloud 项目 IDSTORAGE_BUCKET:用于临时作业资产和最终输出的 Cloud Storage 存储桶SNAPSHOT_ID:要通过其创建新作业的快照的 IDREGION:要运行新 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 问题排查指南。