Apache Beam 支持多个执行引擎后端,包括 Apache Spark 和 Flink。我熟悉 Spark/Flink,并试图了解 Beam 在批处理方面的优势和劣势。
通过查看Beam单词计数示例,感觉它与原生的Spark/Flink等价物非常相似,可能语法稍微冗长一些。
目前我并没有看到选择Beam而不选择Spark/Flink带来的太大好处。 我目前能够做出的唯一观察结论是:
- 优点:对各种执行后端进行抽象。
- 缺点:这种抽象是以牺牲在Spark/Flink中确切执行的控制权为代价的。
是否有更好的例子来突出Beam模型的其他优缺点?有关失去控制权如何影响性能的信息吗?
请注意,我不是在询问流式处理方面的差异,这部分内容在这个问题中部分涵盖,并在这篇文章中总结(由于Spark 1.X而过时)。