Apache Beam可以替代Flink与Spark吗?

你难道还不知道Apache Beam?

Apache Beam 是用于批处理和流数据处理作业的统一编程模型,是云数据湖架构中流批一体统一架构的利器。

Apache Beam ,使得在流与批之间可以非常容易的切换。Apache Beam项目重点在于数据处理的编程范式和接口定义,并不涉及具体执行引擎的实现,可以把其看着一个框架,而引擎的实现还是依赖于Spark,Flink等。

Apache Beam主要由Beam SDK和Beam Runner组成,Beam SDK定义了开发分布式数据处理任务业务逻辑的API接口,生成的的分布式数据处理任务Pipeline交给具体的Beam Runner执行引擎。Apache Beam支持的底层执行引擎包括Apache Flink,Apache Spark以及Google Cloud Platform,具体架构如下图所示:

Apache Beam的优点

(1)统一批处理和流处理。许多系统可以同时处理批处理和流处理,但它们通常通过单独的 API 来实现。但在 Beam 中,批处理和流式传输只是延迟、完整性和成本方面的两点。从批处理到流处理不存在学习/重写的切换成本。因此,如果您今天编写了一个批处理pipeline,但明天因为延迟需要进行切换为流,那么调整起来非常容易。

(2)提高抽象级别的 API:Beam 的 API 专注于捕获数据和逻辑的属性,而不是让底层运行时的细节泄漏。这既是可移植性的关键,也可以为运行时的执行方式提供很大的灵活性。Beam 的Source API专门为避免pipeline内的分片过度规范而构建。它为runner提供了可以动态地重新平衡工作的方法。通过从本质上消除掉队碎片,可以在性能上产生巨大的差异。

(3)跨运行时的可移植性。:由于数据形状和运行时要求完全分开,因此同一个pipeline可以以多种方式运行。这意味着当您必须从本地迁移到云或从经过考验的真实系统迁移到前沿系统时,您最终不会重写代码。您可以非常轻松地比较选项,找到最适合您当前需求的环境和性能组合。这可能是多种因素的结合——使用开源运行程序在本地处理敏感数据,并在云中的托管服务上处理其他数据。

Apache Beam 可以替代Flink与Spark吗?

我的看法是:Apache Beam是依赖于各种引擎的,它的优势是统一了引擎减少了学习成本,但是随之带来的缺点也是增加了学习成本。举个例子,如果我在使用Beam时遇到了一个问题,当需要调试问题时,我们需要了解底层运行器及其 API(例如底层是Flink),那么这时候你既需要会Beam还需要深入Flink。

其次,Beam依赖与各种引擎,且需要为各种引擎的feature提供支持,但是引擎也在快速迭代,很可能出现一个 feature 在 beam 里不能用,但是引擎本身又是支持的,这需要增加团队维护代码的工作量。

所以说,如果你已充分了解 Spark 或Flink,使用他们可能会更有益。而如果您的团队中没有具有深厚大数据经验的工程师,或者您时间不够,那么 Apache Beam + Dataflow 是个选择,也方便流批一体的统一。



如果觉得这篇文章对你有所帮助,
请点一下或者,是对我的肯定和支持~


请使用浏览器的分享功能分享到微信等