Flink 是一个面向分布式数据流处理和批量数据处理的开源计算平台。和 Spark 类似,两者都希望提供一个统一功能的计算平台给用户,都在尝试建立一个统一的平台以运行批量,流式,交互式,图处理,机器学习等应用。
虽然目标非常类似,但是 Flink 在实现上和 Spark 存在着很大的区别,Flink 从另一个视角看待流处理和批处理,将二者统一起来:Flink 是完全支持流处理,也就是说作为流处理看待时输入数据流是无界的;批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。
下面从框架、SQL 支持、性能等几方面来对比两者的区别:
框架
Flink 和 Spark 都是基于内存计算、支持实时/批处理等多种计算模式的统一框架,但Flink 的设计理念是 Stream as Platform,而 Spark 的设计理念是 Batch as Platform。
流计算
Spark 基于小批量处理,把 Streaming 看成是更快的批处理,支持秒级计算,在流计算方面延时较大。而 Flink 基于每个事件处理,是真正的流式计算,跟 Storm 的性能差不多,支持毫秒级计算。
SQL支持
Spark 提供 SparkSQL,Flink 通过 Table API 提供 SQL 交互支持。两者相比,Spark 对 SQL 支持更好,而且 Spark 支持对 SQL 的优化和扩展等,相关社区非常活跃。而 Flink 在 SQL 支持方面还有很大提升空间。
性能
在大家都关心的计算性能方面,两者都有较好的表现,但 Flink 支持增量迭代等特性,因此 Flink 具有更好的性能表现。
社区活跃度
Spark 社区非常活跃,生态系统越来越完善。而 Flink 社区活跃度相对较低,但相信随着 Flink 应用越来越广泛,这一现象会得到改变。