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 位置。
Java
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 只需要用于存储工作器启动映像和本地日志的空间。这些值为默认值。
Python
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 只需要用于存储工作器启动映像和本地日志的空间。这些值为默认值。
Go
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 CLI
使用 gcloud dataflow jobs run
命令或 gcloud dataflow flex-template run
命令运行流水线时,如需启用 Streaming Engine,请使用以下标志:
--enable-streaming-engine
要停用 Streaming Engine,请使用以下标志:
--additional-experiments=disable_streaming_engine
REST
使用 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 服务选项。
Java
--dataflowServiceOptions=enable_streaming_engine_resource_based_billing
Python
--dataflow_service_options=enable_streaming_engine_resource_based_billing
Go
--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 联系。