流处理已经获得了越来越多的关注,不论是在学术界和工业界,在很多特定的场景下,批处理无法满足使用者的需求,实时的流处理是必不可少的。目前主流的框架主要集中在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