使用 Streaming Engine 处理流式作业

Dataflow 的 Streaming Engine 会将流水线执行从工作器虚拟机中移出并移入 Dataflow 服务后端。当您不使用 Streaming Engine 处理流处理作业时,Dataflow Runner 完全在工作器虚拟机上执行流处理流水线的各步骤,并会消耗工作器 CPU、内存和 Persistent Disk 存储空间。

以下流水线默认启用 Streaming Engine:

  • 使用 Apache Beam Python SDK 2.21.0 版或更高版本以及 Python 3 的流处理流水线。
  • 使用 Apache Beam Go SDK 2.33.0 版或更高版本的流处理流水线。

如需详细了解 Streaming Engine 的实现,请参阅“Streaming Engine:用于高度可扩缩、低延迟数据处理的执行模型”

优势

Streaming Engine 模型具有以下优点:

  • 减少工作器虚拟机上的 CPU、内存和 Persistent Disk 存储空间资源用量。Streaming Engine 最适合较小的工作器机器类型(n1-standard-2,而非 n1-standard-4)。除了小型工作器启动磁盘之外,它不需要 Persistent Disk,从而减少了资源和配额用量。
  • 可让横向自动扩缩功能更快地响应传入数据量的变化。Streaming Engine 可让您以更顺畅且更精细的方式扩缩工作器的数量。
  • 可提升支持能力,因为您无需重新部署流水线即可应用服务更新。

减少的工作器资源主要是通过将工作负载分流到 Dataflow 服务实现的。因此,使用 Streaming Engine 会产生一笔相关费用

支持和限制

  • 对于 Java SDK,Streaming Engine 需要使用 Apache Beam SDK 2.10.0 或更高版本。
  • 对于 Python SDK,Streaming Engine 需要使用 Apache Beam SDK 2.16.0 或更高版本。
  • 对于 Go SDK,Streaming Engine 需要使用 Apache Beam SDK 2.33.0 或更高版本。
  • 您无法更新已运行的流水线来使用 Streaming Engine。如果您的流水线在没有 Streaming Engine 的情况下在生产环境中运行,并且您想使用 Streaming Engine,请使用 Dataflow 排空选项停止您的流水线。然后,指定 Streaming Engine 参数并重新运行流水线。
  • 对于使用 Streaming Engine 的作业,打开窗口的聚合输入数据的限制为每个键 60 GB。聚合输入数据包括缓冲元素自定义状态。流水线超出此限制时,会因为系统延迟时间较长而卡住,并且作业日志中的消息会指示已超出此限制。最佳实践是避免采用会导致大型键的流水线设计。如需了解详情,请参阅编写 Dataflow 流水线时将可伸缩性考虑在内
  • 支持客户管理的加密密钥 (CMEK)

使用 Streaming Engine

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

Streaming Engine 需要使用 Apache Beam Java SDK 2.10.0 或更高版本。

如需对流处理流水线使用 Streaming Engine,请指定以下参数:

  • --enableStreamingEngine(如果您使用的是 Java 版 Apache Beam SDK 2.11.0 或更高版本)。
  • --experiments=enable_streaming_engine(如果您使用的是 Java 版 Apache Beam SDK 2.10.0 版)。

如果您对流水线使用 Dataflow Streaming Engine,请勿指定 --zone 参数,而应指定 --region 参数并将值设置为支持的区域。Dataflow 会自动选择指定区域中的可用区。如果您指定了 --zone 参数并将其设置为可用区域之外的一个可用区,则 Dataflow 会报告错误。

Streaming Engine 最适合较小的核心工作器机器类型。请使用作业类型来确定是否使用高内存工作器机器类型。我们建议的机器类型示例包括 --workerMachineType=n1-standard-2--workerMachineType=n1-highmem-2。您还可以设置 --diskSizeGb=30,因为 Streaming Engine 只需要用于存储工作器启动映像和本地日志的空间。这些值为默认值。

Streaming Engine 需要使用 Apache Beam Python SDK 2.16.0 或更高版本。

当满足以下条件时,对于新的 Dataflow 流处理流水线,Streaming Engine 默认处于启用状态。

  • 流水线使用 Apache Beam Python SDK 2.21.0 或更高版本以及 Python 3。
  • 不使用客户管理的加密密钥
  • Dataflow 工作器与 Dataflow 作业处于同一区域

在 Python SDK 2.45.0 版或更高版本中,您无法为流处理流水线停用 Streaming Engine。在 Python SDK 2.44.0 版或更早版本中,如需停用 Streaming Engine,请指定以下参数:

--experiments=disable_streaming_engine

如果您使用 Python 2 来启用 Streaming Engine,请指定以下参数:

--enable_streaming_engine

如果您在流水线中使用 Dataflow Streaming Engine,请勿指定 --zone 参数。而应指定 --region 参数并将值设置为支持的区域。Dataflow 会自动选择指定区域中的可用区。如果您指定了 --zone 参数并将其设置为可用区域之外的一个可用区,则 Dataflow 会报告错误。

Streaming Engine 最适合较小的核心工作器机器类型。请使用作业类型来确定是否使用高内存工作器机器类型。我们建议的机器类型示例包括 --workerMachineType=n1-standard-2--workerMachineType=n1-highmem-2。您还可以设置 --disk_size_gb=30,因为 Streaming Engine 只需要用于存储工作器启动映像和本地日志的空间。这些值为默认值。

Streaming Engine 需要使用 Apache Beam Go SDK 2.33.0 或更高版本。

默认情况下,系统会为使用 Apache Beam Go SDK 的新 Dataflow 流处理流水线启用 Streaming Engine。

如果要在 Go 流式流水线中停用 Streaming Engine,请指定以下参数。每次您要停用 Streaming Engine 时都必须指定此参数。

--experiments=disable_streaming_engine

如果您在流水线中使用 Dataflow Streaming Engine,请勿指定 --zone 参数。而应指定 --region 参数并将值设置为支持的区域。Dataflow 会自动选择指定区域中的可用区。如果您指定了 --zone 参数并将其设置为可用区域之外的一个可用区,则 Dataflow 会报告错误。

Streaming Engine 最适合较小的核心工作器机器类型。请使用作业类型来确定是否使用高内存工作器机器类型。我们建议的机器类型示例包括 --workerMachineType=n1-standard-2--workerMachineType=n1-highmem-2。您还可以设置 --disk_size_gb=30,因为 Streaming Engine 只需要用于存储工作器启动映像和本地日志的空间。这些值为默认值。

使用 gcloud dataflow jobs run 命令或 gcloud dataflow flex-template run 命令运行流水线时,如需启用 Streaming Engine,请使用以下标志:

--enable-streaming-engine

要停用 Streaming Engine,请使用以下标志:

--additional-experiments=disable_streaming_engine

使用 REST API 中的 projects.locations.jobs.create 方法运行流水线时,请使用 Job 资源启用或停用 Streaming Engine。如需启用 Streaming Engine,请在 environment 下,将 experiments 字段设置为 enable_streaming_engine

"environment": {
          "experiments": "enable_streaming_engine"
      }

如需停用 Streaming Engine,请在 environment 下,将 experiments 字段设置为 disable_streaming_engine

"environment": {
          "experiments": "disable_streaming_engine"
      }

价格

Dataflow Streaming Engine 提供基于资源的结算模式,您只需为作业使用的总资源付费。使用基于资源的结算模式时,作业消耗的 Streaming Engine 资源按 Streaming Engine 计算单元来计量和衡量。您需要为工作器 CPU、工作器内存和 Streaming Engine 计算单元付费。

使用基于资源的结算模式

如需使用基于资源的结算模式,请在启动或更新作业时,添加以下 Dataflow 服务选项

JavaPythonGo
--dataflowServiceOptions=enable_streaming_engine_resource_based_billing
--dataflow_service_options=enable_streaming_engine_resource_based_billing
--dataflow_service_options=enable_streaming_engine_resource_based_billing

按处理的数据量结算(旧版)

除非您启用基于资源的结算,否则您的作业将按处理的数据量结算,这是旧版方式。

验证结算模式

除非您使用 Dataflow Prime,否则如果您的作业使用基于资源的结算模式,账单会包含 SKU Streaming Engine Compute Unit。如果您的作业按处理的数据量结算,则账单会包含 SKU Streaming Engine data processed。如果您的一些作业使用基于资源的结算,而其他作业按处理的数据量结算,则账单会同时包含这两个 SKU。

当您将 Dataflow Prime 与基于资源的结算模式搭配使用时,账单会包含数据计算单元 (DCU) SKU。

如需查看您的作业使用的价格模式,请在 Dataflow 监控界面中选择您的作业。如果您的作业使用基于资源的结算,则作业信息侧边栏会包含 Streaming Engine Compute 单元字段。

如果您对结算有任何疑问,请与 Cloud Customer Care 联系。