默认情况下,Dataflow 流处理作业会在单个 Compute Engine 可用区中运行部分后端 资源,这使得这些作业在可用区发生服务中断时容易丢失数据 。 流处理高可用性通过在区域中的多个可用区之间复制后端状态,使 Streaming Engine作业成为区域级资源。启用流处理高可用性后,单可用区故障不会导致流处理作业停止运行。
支持和限制
流处理高可用性有以下要求和限制:
- 必须使用 Streaming Engine: 作业必须是使用 Streaming Engine 的流处理流水线。
- 必须使用区域级工作器放置: Compute Engine 工作器必须
使用 区域级
放置。
如果作业仅在特定可用区中放置了工作器,并且该可用区变得不可用,则即使后端状态已复制,作业也无法处理数据,因为其工作器不可用。因此,当启用流处理高可用性时,Dataflow 会拒绝指定特定工作器可用区(例如
--workerZone、--worker_zone或--zone)的作业。 - 仅在创建作业时配置: 您只能在启动新作业时启用流处理高可用性。执行就地
流水线更新时,您无法启用或停用流处理
高可用性。如需更改正在运行的流水线上的此
设置,请执行
自动停止和替换
更新,或者
停止或排空流水线并
启动新作业,而不使用
--update标志。 - 额外的水印延迟: 启用流处理高可用性后,只有在数据经过处理并在可用区之间复制后,作业的水印才会前进。由于水印会等待跨可用区复制,因此您可能会注意到几秒钟的额外水印延迟。
- 必须使用基于资源的结算: 流处理高可用性作业始终 使用 基于资源的 结算,而从不使用 按处理的数据量 结算。即使 作业使用基于资源的结算,在 预览版期间,流处理高可用性也不会产生额外费用;如需了解详情,请参阅 价格。
启用流处理高可用性
如需在启动新的
Dataflow 流处理作业时启用流处理高可用性,请设置 requires_high_availability
服务选项。
Java
--dataflowServiceOptions=requires_high_availability
Python
--dataflow_service_options=requires_high_availability
Go
--dataflow_service_options=requires_high_availability
gcloud
使用
gcloud dataflow jobs run命令
或使用
gcloud dataflow flex-template
run命令运行 Flex 模板时,请添加
--enable-streaming-engine和 --additional-experiments标志:
--enable-streaming-engine \
--additional-experiments=requires_high_availability
例如,如需运行已启用流处理高可用性的 Flex 模板,请执行以下操作:
gcloud dataflow flex-template run JOB_NAME \
--project=PROJECT_ID \
--template-file-gcs-location=TEMPLATE_LOCATION \
--region=REGION \
--parameters=KEY_1=VALUE_1,KEY_2=VALUE_2 \
--enable-streaming-engine \
--additional-experiments=requires_high_availability
替换以下值:
JOB_NAME:Dataflow 作业的名称PROJECT_ID:您的 Google Cloud 项目 IDTEMPLATE_LOCATION:Flex 模板规范文件的 Cloud Storage 路径REGION:作业运行的区域KEY_1=VALUE_1、KEY_2=VALUE_2:Flex 模板的键值参数对
控制台
如需在控制台 Google Cloud 中运行模板或 Flex 模板 时启用流处理高可用性,请执行以下操作:
在 Google Cloud 控制台中,前往 Dataflow 作业 页面。
点击基于模板创建作业 。
从 Dataflow 模板 菜单中选择要运行的模板。
展开可选参数 。
在其他实验 字段中,输入
requires_high_availability。点击运行作业 。
REST
启动 Flex 模板时,请使用 additionalExperiments 字段在
RuntimeEnvironment
对象中,或在
FlexTemplateRuntimeEnvironment
对象中:
{
"additionalExperiments": ["requires_high_availability"]
}
故障切换行为
在极少数情况下,如果发生可用区故障切换,您可能会观察到几秒到几分钟的吞吐量降低,这是因为作业会切换到新的主要状态并在另一个可用区中建立新的次要副本。故障切换会自动发生,不会丢失数据,并且无需您执行任何操作。您 可以使用 监控高可用性中所述的指标跟踪故障切换事件。
来源和接收器
将 Dataflow 作业配置为区域级资源不会自动使作业的来源和接收器成为区域级或全球级。区域级和全球级来源和接收器都适用于流处理高可用性,因为两者都不依赖于单个可用区。每个来源或接收器的可用性取决于该服务的配置:
- 许多 Google Cloud 来源和接收器(例如 Pub/Sub、 BigQuery 和 Google Cloud Managed Service for Apache Kafka)默认提供区域级或全球级 可用性。
- 如果您使用自定义或自行管理的来源和接收器(例如自行托管的 Apache Kafka 或 Apache Iceberg),则必须单独配置和维护其区域级可用性。
监控高可用性
您可以使用 dataflow.googleapis.com/job/high_availability_mode 指标在 Cloud Monitoring 中监控作业的高可用性状态。此布尔值测量指标包含一个 status 标签,该标签对于作业的当前状态为 true,对于其他状态为 false。status 标签具有以下可能的值:
Disabled:此作业未启用流处理高可用性。Highly Available:已启用流处理高可用性,并且后端状态已在可用区之间复制。Establishing High Availability:后端状态暂时未复制(例如,在可用区发生故障后),但系统正在创建新的次要副本。
启用流处理高可用性后,只有在数据经过处理并在可用区之间复制后,标准 Dataflow 水印指标才会前进。如需详细了解如何查看 指标,请参阅 使用 Monitoring。
价格
在预览版期间,使用流处理高可用性不会产生额外费用。
正式版 (GA) 后,复制用量将按与主要状态用量相同的费率计费。状态用量将作为 Streaming Engine 计算 单元的一部分进行计量。
后续步骤
- 详细了解 Dataflow 区域和区域级 放置。
- 详细了解 Streaming Engine。
- 使用 Monitoring监控流水线。