使用 Dataflow 运行流水线时,Dataflow Runner 会将流水线代码和依赖项上传到 Cloud Storage 存储桶并创建 Dataflow 作业。此 Dataflow 作业在 Google Cloud 中的代管式资源上运行流水线。
- 对于使用 Apache Beam Java SDK 2.54.0 或更高版本的批处理流水线,Runner v2 默认处于启用状态。
- 对于使用 Apache Beam Java SDK 的流水线,在运行多语言流水线、使用自定义容器,或者使用 Spanner 或 Bigtable 变更数据流流水线时,Runner v2 是必需的。在其他情况下,请使用默认运行程序。
- 对于使用 Apache Beam Python SDK 2.21.0 或更高版本的流水线,Runner v2 默认处于启用状态。 对于使用 Apache Beam Python SDK 2.45.0 版及更高版本的流水线,Dataflow Runner v2 是唯一可用的 Dataflow 运行程序。
- 对于 Go 版 Apache Beam SDK,Dataflow Runner v2 是唯一可用的 Dataflow 运行程序。
Runner v2 使用基于服务的架构,这对某些流水线有利:
Dataflow Runner v2 可让您预构建 Python 容器,这有助于缩短虚拟机启动时间和提升横向自动扩缩性能。如需了解详情,请参阅预构建的 Python 依赖项。
Dataflow Runner v2 支持多语言流水线,该功能使 Apache Beam 流水线能够使用其他 Apache Beam SDK 中定义的转换。Dataflow Runner v2 支持在 Python SDK 流水线中使用 Java 转换以及在 Java SDK 流水线中使用 Python 转换。当您在没有 Runner v2 的情况下运行 Apache Beam 流水线时,Dataflow 运行程序会使用特定于语言的工作器。
局限和限制
Dataflow Runner v2 具有以下要求:
- Dataflow Runner v2 需要将 Streaming Engine 用于流作业。
- 由于 Dataflow Runner v2 需要 Streaming Engine 来流式传输作业,因此任何需要 Dataflow Runner v2 的 Apache Beam 转换还需要使用 Streaming Engine 来流式传输作业。例如,Python 版 Apache Beam SDK 的 Pub/Sub Lite I/O 连接器是一种需要 Dataflow Runner v2 的跨语言转换。如果您尝试为使用此转换的作业或模板停用 Streaming Engine,则作业将失败。
- 对于使用 Apache Beam Java SDK 的流处理流水线,
MapState
和SetState
类不受支持。 - 对于使用 Apache Beam Java SDK 的批处理和流处理流水线,
OrderedListState
和AfterSynchronizedProcessingTime
类不受支持。
启用 Dataflow Runner v2
如需启用 Dataflow Runner v2,请按照 Apache Beam SDK 的配置说明进行操作。
Java
Dataflow Runner v2 需要使用 Apache Beam Java SDK 2.30.0 或更高版本,建议使用 2.44.0 版或更高版本。
对于使用 Apache Beam Java SDK 2.54.0 或更高版本的批处理流水线,Runner v2 默认处于启用状态。
如需启用 Runner v2,请在运行作业时使用 --experiments=use_runner_v2
标志。
如需停用 Runner v2,请使用 --experiments=disable_runner_v2
标志。
某些流水线会自动选择启用 Runner v2。如需阻止流水线使用此功能,请使用 --experiments=disable_runner_v2
流水线选项。
Python
对于使用 Apache Beam Python SDK 2.21.0 或更高版本的流水线,Runner v2 默认处于启用状态。
Apache Beam Python SDK 2.20.0 及更低版本不支持 Dataflow Runner v2。
在某些情况下,虽然流水线在受支持的 SDK 版本上运行,但流水线可能不使用 Runner v2。在这种情况下,如需使用 Runner v2 运行作业,请使用 --experiments=use_runner_v2
标志。
如果您要停用 Runner V2 并将您的作业标识为 auto_runner_v2
实验,请使用 --experiments=disable_runner_v2
标志。Apache Beam Python SDK 2.45.0 版及更高版本不支持停用 Runner v2。
Go
Dataflow Runner v2 是唯一适用于 Go 版 Apache Beam SDK 的 Dataflow Runner。Runner v2 默认处于启用状态。
监控作业
使用监控界面可查看 Dataflow 作业指标,例如内存利用率、CPU 利用率等。
您可以通过 Logs Explorer 和 Dataflow 监控界面获取工作器虚拟机日志。工作器虚拟机日志包括来自运行程序自动化测试框架进程的日志和来自 SDK 进程的日志。 您可以使用虚拟机日志来排查作业问题。
Runner v2 问题排查
如需使用 Dataflow Runner v2 排查作业问题,请按照标准流水线问题排查步骤进行操作。以下列表提供了有关 Dataflow Runner v2 工作原理的其他信息:
- Dataflow Runner v2 作业在工作器虚拟机上运行两种类型的进程:SDK 进程和运行程序自动化测试框架进程。根据流水线和虚拟机类型,可能有一个或多个 SDK 进程,但每台虚拟机只有一个运行程序自动化测试框架进程。
- SDK 进程运行用户代码和其他特定于语言的功能。运行程序自动化测试框架进程管理其他一切。
- 在开始从 Dataflow 请求工作之前,运行程序自动化测试框架进程会等待所有 SDK 进程与其连接。
- 如果工作器虚拟机在 SDK 进程启动期间下载并安装依赖项,则作业可能会延迟。
如果在 SDK 过程中(例如启动或安装库时)出现问题,则工作器会将其状态报告为运行状况不佳。如果启动时间增加,请在项目上启用 Cloud Build API,并使用以下参数提交您的流水线:
--prebuild_sdk_container_engine=cloud_build
。 - 由于 Dataflow Runner v2 使用检查点,因此每个工作器可能会在缓冲更改时等待长达 5 秒,然后再发送更改以进行进一步处理。因此,预计延迟时间约为 6 秒。
- 如需诊断用户代码中的问题,请检查来自 SDK 进程的工作器日志。如果在运行程序自动化测试框架日志中发现任何错误,请与支持团队联系以提交错误。
- 如需调试与 Dataflow 多语言流水线相关的常见错误,请参阅多语言流水线提示指南。