Dataflow 区域

Dataflow 区域可以存储和处理与 Dataflow 作业相关的元数据,以及部署和控制 Dataflow 工作器。

区域名称遵循基于 Compute Engine 区域名称的标准惯例。例如,美国中部区域的名称为 us-central1

此功能适用于支持 Dataflow 的所有区域。如要查看可用位置,请参阅 Dataflow 位置

区域选择准则

请参考以下准则为您的作业选择合适的区域。

安全与合规性

为满足项目的安全与合规性需求,您可能需要将 Dataflow 作业处理过程限定到特定的地理区域。

数据存放区域

您可以通过在与数据源、接收器、登台文件位置和临时文件位置相同的区域中运行数据流作业来最大程度地减少网络延迟和网络传输费用。如果您使用位于作业区域之外的源、接收器、登台文件位置或临时文件位置,则数据可能会跨区域发送。

在运行流水线时,用户数据仅由 Dataflow 工作器池进行处理,数据的移动仅限于连接池中的 Dataflow 工作器的网络路径。

虽然用户数据严格由指定地理区域中的 Dataflow 工作器进行处理,但流水线日志消息存储在 Cloud Logging 中(该工具供全球 Google Cloud 用户共用)。

如果您需要更好地控制流水线日志消息的位置,则可以执行以下操作:

  1. _Default 日志路由器接收器创建排除项过滤条件,以防止将 Dataflow 日志导出到 _Default 日志存储桶。
  2. 在您选择的区域中创建日志存储桶
  3. 配置新的日志路由器接收器,以将 Dataflow 日志导出到新的日志存储桶。

如需详细了解如何配置日志记录,请参阅路由和存储概览日志路由概览

以下为常见 Dataflow 作业来源的说明:

  • 使用 Cloud Storage 存储桶作为来源时,我们建议您在与存储桶相同的区域中执行读取操作。
  • Pub/Sub 主题在发布到全球 Pub/Sub 端点时,会存储在最近的 Google Cloud 区域中。但是,您可以将主题存储政策修改为特定的一个区域或一组区域。同样,Pub/Sub Lite 主题仅支持可用区级存储。

弹性与地理位置分离

您可能希望隔离一般 Dataflow 操作,使其不受其他地理区域发生的中断情况影响。 或者,您可能需要计划设立备用网站,以便在发生区域性灾难时维持业务连续性。

灾难恢复和业务连续性计划中,我们建议您纳入用于 Dataflow 作业的来源和接收器的详细信息。Google Cloud 销售团队可以帮助您满足您的要求。

区域放置

默认情况下,您选择的区域会将 Dataflow 工作器池配置为使用该区域内所有可用的可用区。每个工作器在创建时,系统都会为其计算可用区选择,从而优化资源获取和未使用预留的利用。

区域放置具有以下优势:

  • 提高了资源可用性:Dataflow 作业能够更灵活地应对可用区级资源可用性错误,因为系统可以继续在具有剩余可用性的其他可用区中创建工作器。
  • 提高了可靠性:如果发生可用区故障,Dataflow 作业可以继续运行,因为系统会在其他可用区中重新创建工作器。

存在以下限制:

  • 只有使用 Streaming Engine 或 Dataflow Shuffle 的作业支持区域选择。已停用 Streaming Engine 或 Dataflow Shuffle 的作业无法使用区域放置。
  • 区域放置仅适用于虚拟机,不适用于后端资源。
  • 虚拟机不会跨多个可用区复制。例如,如果某个虚拟机不可用,则其工作项会被视为丢失,并由另一个虚拟机重新处理。
  • 如果区域范围的资源缺乏,则 Dataflow 服务将无法创建更多虚拟机。

查看作业资源可用区

Dataflow 作业依赖于内部资源。其中一些后端作业资源是可用区级资源。如果一个可用区发生故障,并且 Dataflow 作业所需的可用区级资源位于该可用区,则该作业可能会失败。

如需了解作业是否因可用区服务中断而失败,请查看作业的后端资源正在使用的服务可用区。此功能仅适用于 Streaming Engine 作业。

  • 如需在 Google Cloud 控制台中查看服务可用区,请使用作业信息面板中的服务可用区字段。

  • 如需使用该 API 查看服务可用区,请使用 ServiceResources 字段。

此字段中的值会在作业运行期间更新,因为作业使用的资源会在作业运行期间发生变化。

自动可用区放置

对于不支持区域放置的作业,系统会根据请求创建作业时可用的可用区容量自动在该区域内选择最佳可用区。自动选择可用区有助于确保作业工作器在最适合您的作业的可用区中运行。

由于作业配置为在单个可用区中运行,因此,如果没有足够的 Compute Engine 资源可用,操作可能会失败并显示可用区级资源可用性错误。如果某个区域发生缺货,您可能会看到 ZONE_RESOURCE_POOL_EXHAUSTED 错误。您可以实现重试循环,以便在有资源可用时启动作业。

此外,当某个可用区不可用时,流式传输后端也可能会不可用,从而可能导致数据丢失。

指定一个区域

如需为作业指定区域,请将 --region 选项设置为一个受支持的区域。--region 选项会替换元数据服务器、本地客户端或环境变量中设置的默认区域。

Dataflow 命令行界面也支持使用 --region 选项指定区域。

替换工作器区域或可用区

默认情况下,当您使用 --region 选项提交作业时,工作器会自动分配给该区域中的可用区或该区域中的单个最佳可用区(具体取决于作业类型)。

如果您要确保 Dataflow 作业的工作器仅在特定可用区中运行,则可以使用以下流水线选项指定该可用区。此使用模式对于 Dataflow 作业来说不常见。

此选项仅控制用于 Dataflow 工作器的可用区,不适用于后端资源。后端资源可能会在作业区域内的任何可用区中创建。

Java

--workerZone

Python

--worker_zone

Go

--worker_zone

对于其他所有情况,我们不建议替换工作器位置。常见方案表包含针对这些情况的使用建议。

由于作业配置为在单个可用区中运行,因此,如果没有足够的 Compute Engine 资源可用,操作可能会失败并显示可用区级资源可用性错误。

您可以运行 gcloud compute regions list 命令来查看可用于工作器部署的地区和区域列表。

常见方案

下表包含适用于常见情景的使用建议。

场景 建议
我想使用受支持的区域,并且在该区域内没有偏好的可用区。在这种情况下,系统会根据可用容量自动选择最佳可用区。 使用 --region 指定作业区域。这可确保 Dataflow 在指定区域内管理您的作业及处理数据。
我希望在区域的特定可用区中执行工作器处理过程。 指定 --region 以及 --workerZone--worker_zone

使用 --region 指定作业区域。使用 --workerZone--worker_zone 指定该区域内的特定可用区