澄清和规范 Runner 功能

随着初始代码发布的完成(Dataflow SDK 和 RunnerFlink RunnerSpark Runner)以及对 StormHadoopGearpump(以及其他)的 Runner 实现表现出兴趣,我们希望开始解决 Apache Beam(孵化器)社区中一个重要的问题:每个 Runner 将能够支持哪些功能?

虽然我们希望有一个世界,所有 Runner 都支持 Beam 模型中包含的全部语义套件(以前称为 Dataflow 模型),但实际上,总是会有一些 Runner 无法提供某些功能。例如,基于 Hadoop 的 Runner 本质上是批处理的,可能无法(轻松地)实现对无界集合的支持。但是,这并不妨碍它对大量用例非常有用。在其他情况下,一个 Runner 提供的实现可能具有与另一个 Runner 提供的实现略有不同的语义(例如,即使当前的 Runner 套件都支持 exactly-once 传递保证,Apache Samza Runner(这是一个受欢迎的补充)目前只支持 at-least-once)。

为了帮助澄清这些问题,我们一直在努力为所有现有的 Runner 列出 Beam 模型的关键特征,并将它们分类到模型解决的四个关键问题周围:什么 / 哪里 / 何时 / 如何(如果您不熟悉这些问题,您可能需要阅读 Streaming 102 了解概述)。此表将随着模型的演变、我们理解的增长以及 Runner 的创建或功能的添加而不断更新。

下面是目前对现有 Runner 功能的理解摘要(有关完整详细信息、描述和 Jira 链接,请参见 实时版本);由于集成仍在进行中,因此整个系统尚未处于完全稳定、可用的状态。但这将在不久的将来发生改变,当第一个受支持的 Beam 1.0 版本发布时,我们将在本博客上大声宣布。

同时,这些表格应该有助于澄清我们对近期情况的预期,并帮助指导对现有 Runner 能力以及 Runner 实现者将要处理的功能的预期。

Beam 模型Google Cloud DataflowApache FlinkApache Spark
ParDo
GroupByKey
~
Flatten
Combine
复合转换
~
~
~
侧输入
~
~
源 API
~
聚合器
~
~
~
~
键控状态
Beam 模型Google Cloud DataflowApache FlinkApache Spark
全局窗口
固定窗口
~
滑动窗口
会话窗口
自定义窗口
自定义合并窗口
时间戳控制
Beam 模型Google Cloud DataflowApache FlinkApache Spark
可配置触发
事件时间触发器
处理时间触发器
计数触发器
[元]数据驱动的触发器
复合触发器
允许的延迟
计时器
Beam 模型Google Cloud DataflowApache FlinkApache Spark
丢弃
累积
累积和撤回
Beam 模型Google Cloud DataflowApache FlinkApache Spark
基础
~
~
侧输入
~
~
可拆分 DoFn 发起的检查点
~
~
动态拆分
~
捆绑最终化
~
Beam 模型Google Cloud DataflowApache FlinkApache Spark
基础
~
侧输入
可拆分 DoFn 发起的检查点
~
动态拆分
捆绑最终化
~