数据处理框架Spark、Flink

459 阅读2分钟

流式处理和批处理

  • 批处理 是指对固定数量的数据执行计算。也就是说我们已经知道数据的边界,并且可以在处理之前查看所有数据,例如一周内发生的所有销售行为。
  • 流处理 适用于实时处理的“无限”或无界数据集。流处理的常见用例包括监控用户活动、处理游戏日志和检测欺诈交易。

分布式数据处理的演进

SparkFlink 是第三代和第四代数据处理框架。

MapReduce 是第一代分布式数据处理系统。

该框架在水平扩展的分布式基础架构上处理可并行数据和计算。除了并行化和数据分发之外,MapReduce还从开发人员那里抽象出分布式系统的所有系统级复杂性,并提供容错功能。它支持批处理。

随后,一些第二代分布式处理系统框架对 MapReduce 模型进行了改进。例如,Tez 提供了交互式编程和批处理。

Spark 被认为是第三代数据处理框架,原生支持批处理和流处理。

image.png

Flink 是第四代数据处理框架,是 Apache 的顶级项目之一。

Flink 支持批处理和流处理,并且是为原生流处理而设计的。Flink促进了连续流式传输,其中一旦收到事件就会触发事件计算。

image.png

Spark VS Flink:功能比较

Spark和Flink中的功能集在很多方面都不同,如下表所示:

性能SparkFlink
数据处理批次/流(微批次)批处理/流(本机)
迭代NoYes
SQLSpark SQLTable & SQL API
容错Yes (WAL算法)Yes (Chandy-Lamport算法)
优化手动自动
窗口定时时间,计数
状态后端HDFS内存、文件系统、RocksDB
语言Scala, Java, Python, R, C#, F#Java, Scala, Python, SQL
成本开源开源
Backpressure手动配置隐式,通过架构
延迟亚秒

结论

虽然 Flink 更新,但 Spark 更成熟,使用范围更广。此外,Spark 具有托管支持,并且很容易找到许多现有用例以及其他用户共享的最佳实践。

虽然 Flink 并不成熟,但它对于复杂的事件处理或原生流用例很有用,因为它提供了更好的性能、延迟和可扩展性。此外,它对窗口和状态管理有更好的支持。 Flink 能够使用原始操作完成许多需要在 Spark 中开发自定义逻辑的操作。

参考

Spark 与 Flink 究竟哪家强?:zhuanlan.zhihu.com/p/549490227