流处理已经获得了越来越多的关注,不论是在学术界和工业界,在很多特定的场景下,批处理无法满足使用者的需求,实时的流处理是必不可少的。目前主流的框架主要集中在Flink、Spark和Storm上,这三个框架有各自的优点,也有各自的劣势。理解这三个框架的区别,能帮助使用者在特定的场景下选择更为合理的框架,获得最佳的使用效果。
首先从三个框架的底层去比较一下。Spark采用的想法依然是批处理,用微小的“批”来模拟“流”,以此达到流处理。Flink和Storm则是直接对字节流处理。
其次从处理效率上对比,结果参考论文1的实验,
在框架合理承受范围内,Storm和Flink的处理时间和输入数据量之比是趋近于线性的,Spark会出现分段,如图。

数据量过大时,Storm在过大的数据吞吐时效率很低,Flink表现不如Spark稳定。

对于使用者来说,API和社区资源支持也是不可忽略的,Storm在这一点上还不及另外两个框架。Flink和Spark各有优势,Spark由于使用者较多,目前做得最为出色;Flink的使用者和关注度也在持续升高,未来可期。

虽然目前在资源上Flink稍逊于Spark,但是Flink却拥有几个重要的优势,比如容错能力优越,应对反压能力强,与Hadoop的兼容性更好。用一张对比表格来展示一下对比结果,

每个框架都有自己独特的特性,在不同的场景和需求下,应该灵活地使用框架甚至是优化框架,这样才能获得更好的效率。
参考:
1 Benchmarking Streaming Computation Engines: Storm, Flink and Spark Streaming
本文对比了Flink、Spark和Storm三大主流流处理框架,详细分析了它们在底层处理方式、处理效率、API支持及社区资源方面的优劣。指出Flink在容错能力和反压处理上的优势,以及Spark在用户基数和社区支持上的领先地位。
802

被折叠的 条评论
为什么被折叠?



