我们都知道,Spark和Flink都支持批处理和流处理,接下来让我们对这两种流行的数据处理框架在各方面进行对比。首先,这两个数据处理框架有很多相同点:
• 都基于内存计算:
• 都有统一的批处理和流处理API,都支持类似SQL的编程接口;
• 都支持很多相同的转换操作,编程都是用类似于Scala Collection API的函数式编程模式;
• 都有完善的错误恢复机制;
• 都支持Exactly once的语义一致性;
当然,他们的不同点也是相当明显,我们可以从4个不同的角度来看
• 从流处理的角度来讲,Spark基于微批处理,把流数据看成是一个个小的批处理数据块分别处理,所以延迟性能只能做到秒级。而Flink基于每个事件处理,每当有新的数据输入都会立刻处理,是真正的流式计算,支持毫秒级计算。由于相同的原因,Spark只支持基于时间的窗口操作(处理时间或者事件时间),而Flink支持的窗口操作非常灵活,不仅支持时间窗口,还支持基于数据本身的窗口,开发者可以自由定义想要的窗口操作。
• 从SQl功能的角度来讲,Spark和Flink分别提供SparkSQL和Table API提供SQL交互支持。两者相比较,Spark对SQL支持更好,相应的优化,扩展和性能更好,而Flink在SQL支持方面还有很大提升空间。
• 从迭代计算的角度来讲,Spark对机器学习的支持很好,因为可以在内存中缓存中间计算结果来加速机器学习算法的运行。但是大部分机器学习算法其实是一个有环的数据流,在Spark中,确是用无环图来表示。而Flink支持在运行时间中的有环数据流,从而可以更有效的对机器学习算法进行运算。
• 从相应的生态系统角度来讲,Spark的社区无疑更加活跃。Spark可以说有着Apache旗下最多的开源贡献者,而且有很多不同的库来用在不同场景。而Flink由于比较新,现阶段的开源社区不如Spark活跃,各种库的功能也不如Spark全面。但是Flink还在不断发展,各种功能也在逐渐完善。
如何选择Spark和Flink
对于以下场景,你可以选择Spark:
• 数据量非常大而且逻辑复杂的批数据处理,并且对计算效率有较高要求(比如用大数据分析来构建推荐系统进行个性化推荐,广告定点投放等);
• 基于历史数据的交互式查询,要求响应较快;
• 基于实时数据流的数据处理,延迟性要求在数百毫秒到数秒之间;
Spark完美满足这些场景的需求,而且它可以一站式解决这些问题,无需用别的数据处理平台。
由于Flink是为了提升流处理而创建的平台,所以它适用于各种需要非常低延迟(微秒到毫秒级)的实时数据处理场景,比如实时日志报表分析。而且Flink用流处理去模拟批处理的思想,比如Spark用批处理去模拟流处理的思想扩展性更好。
总之,Apache Spark和Flink都是下一代大数据工具抢占业界关关注的焦点。两者都提供于Hadoop和NoSql数据库的本机连接,并且可以处理HDFS数据。两者都是几个大数据的好方法问题。但由于其底层架构,Flink比Spark更快。Apache Spark是Apache存储库中最活跃的组件,Spark拥有非常强大的社区支持,并且拥有大量的贡献者。Spark已经在生产中部署。但就流媒体功能而言,Flink远比Spark好(因为spark以微批量形式处理流)并且具有对流的本机支持。有人认为:Spark是大数据的3G,而Flink则被视为大数据的4G,该观点仅供参考。
2389

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



