使用 Dataflow 快照

Dataflow 快照保存了流处理流水线的状态,让您可以在不丢失状态的情况下启动 Dataflow 作业的新版本。这对于备份和恢复、对流式流水线的测试和回滚更新以及其他类似场景很有用。

您可以创建任何正在运行的流处理作业的 Dataflow 快照;但是,您通过快照创建的任何新作业都使用 Streaming Engine。您还可以使用 Dataflow 快照将现有流水线迁移到效率更高的、可扩缩的 Streaming Engine 中,并且将停机时间缩至最短。

本指南介绍了如何创建快照、管理快照以及通过快照创建作业。

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 启用 Cloud Dataflow, Compute Engine, Stackdriver Logging, Cloud Storage, Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager API。

    启用 API

创建快照

控制台

  1. 打开 Dataflow 监控界面。
    转到 Dataflow 网页界面

    此时系统将显示 Dataflow 作业及其状态的列表。如果没有看到任何流处理作业,则需要运行新的流处理作业。如需查看流处理作业的示例,请参阅使用模板快速入门

  2. 选择一个作业。
  3. 作业详情页面的菜单栏中,点击创建快照
  4. 创建快照对话框中,选择无数据源以仅创建 Dataflow 作业状态的快照,或选择有数据源以创建 Dataflow 作业状态的快照以及 Pub/Sub 源的快照。

CLI

如需创建快照,请使用 create 命令:

gcloud beta 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 快照会产生磁盘使用费
  • 快照与作业位于同一地区,并且仅为在 us-central1europe-west1europe-west4asia-northeast1 中运行的作业创建。 正式版将支持使用更多区域。
  • 只有在作业于 2020 年 9 月 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 作业短。
  • 您可以在快照进行时取消作业,然后取消快照。
  • 无法在快照进行时更新排空作业。必须等到从快照过程恢复作业后,才能更新或排空作业。

使用快照界面

创建快照后,可以使用快照页面管理项目的快照。

点击快照会打开快照详情页面,在其中可以获取有关快照的其他元数据,以及指向源作业和任何 Pub/Sub 快照的链接。

Dataflow 快照详情页面,在其中可以获取有关快照的详细信息。

删除快照

控制台

  1. 快照快照详情页面中,点击删除
  2. 删除快照对话框中,点击删除进行确认。

CLI

如需删除某个快照,请使用 delete 命令:

gcloud beta dataflow snapshots delete SNAPSHOT_ID \
    --region=REGION

其中:

  • SNAPSHOT_ID 是您的快照 ID。
  • REGION 是快照的地区。

从快照创建作业

创建快照后,可以通过从该快照创建新作业来恢复作业的状态。

控制台

无法通过 Cloud Console 中的快照创建作业。

Java

如需从快照创建新作业,请在启动作业时使用 --createFromSnapshot
--enableStreamingEngine 标志。例如:

mvn -Pdataflow-runner compile exec:java \
    -Dexec.mainClass=org.apache.beam.examples.WordCount \
    -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"

其中:

  • PROJECT_ID 是项目 ID。
  • STORAGE_BUCKET 是用于存储临时作业资源和最终输出的存储分区。
  • SNAPSHOT_ID 是要从中创建新作业的快照 ID。
  • REGION 是作业的位置。

Python

Python 版 Apache Beam SDK 尚不支持此功能。

从 Dataflow 快照创建作业时,以下内容适用:

  • 从快照创建的作业必须在存储快照的同一地区运行。
  • 如果 Dataflow 快照包含 Pub/Sub 源的快照,则从 Dataflow 快照创建的作业会自动 seek 这些 Pub/Sub 快照作为源。从该 Dataflow 快照创建作业时,必须指定源作业使用的相同 Pub/Sub 主题。

  • 如果 Dataflow 快照不包含 Pub/Sub 源的快照,并且源作业使用 Pub/Sub 源,则您必须在通过该 Dataflow 快照创建作业时指定 Pub/Sub 主题。

  • 从快照创建的新作业仍需进行更新兼容性检查

已知限制

以下限制适用于 Dataflow 快照:

  • 无法使用模板或 Dataflow SQL 编辑器从快照创建作业。
  • 只能通过 gcloud 工具设置快照到期时间范围。
  • Dataflow 快照目前仅支持 Pub/Sub 源快照。
  • 目前不支持接收器快照。例如,您无法在创建 Dataflow 快照时创建 BigQuery 快照。
  • 每个项目的每个地区中只允许 10 个已就绪的快照或正在运行的快照。尝试超出此限制创建其他快照时会出错。此限制将在正式版发布后放宽。

问题排查

本部分介绍如何排查与 Dataflow 快照交互时出现的常见问题。

在联系支持团队之前,请确保您已排除与已知限制和以下问题排查部分相关的问题。

快照创建请求遭拒

通过 Cloud Console 或使用 gcloud 工具提交快照创建请求后,Dataflow 服务便会执行前提条件检查,并返回所有错误消息。创建请求可能会因作业类型不受支持或区域不可用等原因而遭拒,如错误消息中所指定。

如果请求因作业太旧而遭拒,则您必须先更新作业,然后才能请求快照。

如果请求因作业达到快照数量上限而被拒,请移除旧快照,或与支持团队联系以提高上限。

无法通过快照创建作业

通过快照创建作业时,请确保快照存在且未过期。新作业必须在 Streaming Engine 上运行。

如需了解常见的作业创建问题,请参阅 Dataflow 的问题排查指南。具体来讲,通过快照创建的新作业需要进行更新兼容性检查,其中新作业必须与截取的源作业快照兼容。

通过快照创建的作业几乎没有进展

通过快照创建作业涉及将快照中的数据加载到新作业中的步骤。仅当作业完全加载后,作业才会开始处理数据。根据快照的大小,此步骤可能需要一段时间。

对于通过包含 Pub/Sub 源快照的 Dataflow 快照创建的作业,新作业可能会有大量 Pub/Sub 积压消息需要处理。流式自动扩缩功能可能有助于新作业更快地清除积压消息。

在截取快照之前,截取的源作业快照可能处于运行状况不佳的状态。了解源作业运行状况不佳的原因可能有助于解决新作业的问题。如需了解常见的作业调试提示,请参阅 Dataflow 的问题排查指南

通过快照创建的作业不会拉取 Pub/Sub 来源

确保随 Dataflow 快照捕获的 Pub/Sub 快照存在且未到期。只要快照中最早的消息超过七天,Pub/Sub 快照就会到期。