版本 0.4.0 添加了 Apache Apex 的运行器

Apache Beam 的最新版本 0.4.0 添加了一个用于 Apache Apex 的新运行器。我们很高兴达到这个初始里程碑,并期待 Beam 和 Apex 社区之间持续合作,以推进运行器。

Beam 衍生于 Google Dataflow SDK,并且作为孵化器项目,它迅速适应了 Apache 的方式,扩大了社区,并吸引了越来越多的用户的兴趣,这些用户希望从概念上强大的统一编程模型中获益,该模型可在不同的大数据处理框架之间移植(参见 流式处理 101流式处理 102)。多个 Apache 项目已经为 Beam 提供了运行器(参见 运行器和功能矩阵)。

Apex 是一个流处理框架,用于在集群上低延迟、高吞吐量、有状态和可靠地处理复杂分析管道。Apex 自 2012 年以来一直在开发中,被大型公司用于大规模实时和批处理。

运行器的初始版本侧重于在功能层面上广泛覆盖 Beam 模型。这意味着,将有后续工作在几个领域进行,以将运行器从功能级别提升到可扩展性和高性能级别,以匹配 Apex 及其本机 API 的功能。运行器功能矩阵显示 Apex 功能与 Beam 模型很好地对齐。具体来说,需要能够以容错且高效的方式跟踪计算状态,以便广泛支持窗口概念,包括基于事件时间的处理。

有状态流处理器

Apex 是从头开始构建的有状态流处理器。操作员以分布式和异步方式检查点状态,从而为整个处理图生成一致的快照,该快照可用于恢复。Apex 还以增量或细粒度方式支持这种恢复。这意味着只有 DAG 中实际受到故障影响的部分将被恢复,而其余管道将继续处理(这可以用来实现具有特殊需求的用例,例如推测执行以实现处理延迟的 SLA)。状态检查点与幂等处理保证是 Apex 中精确一次结果支持的基础。

转换为 Apex DAG

Beam 运行器需要实现从 Beam 模型到底层框架执行模型的转换。在 Apex 的情况下,运行器会将管道转换为本机(组合式、低级)DAG API(这也是许多其他 API 的基础,这些 API 可用于指定在 Apex 上运行的应用程序)。DAG 由操作符组成(功能构建块,通过流连接。运行器提供执行层。在 Apex 的情况下,它是分布式流处理,操作符逐个事件地处理数据。操作符的最小集涵盖 Beam 的基本转换:ParDo.BoundParDo.BoundMultiRead.UnboundedRead.BoundedGroupByKeyFlatten.FlattenPCollectionList 等。

执行和测试

在此版本中,Apex 运行器在嵌入模式下执行管道,其中,与直接运行器类似,所有内容都在单个 JVM 中执行。请参阅 快速入门,了解如何使用 Apex 运行器运行 Beam 示例。

嵌入模式对于开发和调试很有用。生产环境中的 Apex 在 Apache Hadoop YARN 集群上分布式运行。关于如何将 Beam 管道嵌入到 Apex 应用程序包中以在 YARN 上运行的示例,请参见 此处,并且目前正在开发对运行器中直接启动的支持。

Beam 项目非常注重开发过程和工具,包括测试。对于运行器,有一个全面的测试套件,其中包含 200 多个集成测试,这些测试针对每个运行器执行,以确保在进行更改时不会出现问题。测试涵盖了矩阵的功能,因此是对运行器实现的完整性和正确性的衡量。该套件在开发 Apex 运行器时非常有用。

展望

下一步是将 Apex 运行器从功能级别提升到准备好在分布式环境中运行的真实应用程序中使用的级别,利用 Apex 的可扩展性和性能特性,类似于其本机 API。这包括 ParDos 的链接、分区、优化组合操作等。要参与进来,请参见 JIRA 并加入 Beam 社区。