最近网上和各大公司在对比spark 和flink , 也有一部分人,演讲时不分析代码原理,不根据事实,直接吹嘘flink比spark好,flink 能干掉spark 的话,今天就跟大家从技术,应用和未来发展角度对两个产品进行对比。
1.spark中批处理使用 RDD, 流处理使用 DStream,flink中批处理使用 Dataset, 流处理使用 DataStreams。目前flink 在做Dataset 和DataStreams 合并,实现统一API 服务,spark底层是基于RDD进行计算,实现批流一体的一个计算引擎。flink 目前底层还是两套架构,只是在API层实现统一,这方面spark代码的可扩展,可集成上要有优于flink。
2.spark 中的窄依赖和宽依赖,在flink中 One-to-one Stream 和RedistributingStream(重新分配)
在这方面计算都一样,都是将算子进行DAG 1对1 和1对多,类似数据结构的图概念,执行的理念基本上都一样。
3.Flink 中的执行图可以分成四层:StreamGraph ->JobGraph -> ExecutionGraph -> 物理执行图
spark 执行:RDD Object->DAGScheduler ->TastScheduler ->work 执行流程,整个流程全是把业务逻辑转换成Graph 流程图,用于算子的关联计算
4.窗口函数:flink支持基于事件,time、count、session,以及data-driven的窗口操作。spark 的窗口在Structured Streaming 中也实现了基于事件的数据流,功能基本上都能达到平衡,都支持水印操作,只是目前spark 没有CEP ,flink有CEP,这个cep在生产上用的不是很多,做规则引擎会用到,但是性能就会下降,这是flink的一个的功能。
5.检查点:checkpoint 使用将当前数据状态进行快照,其实就是保存数据在每一步操作的状态,当计算出现问题,可以记录动作流畅,重新计算。保存状态的叫state 这个在spark updateStateByKey和mapWithState 两种状态。flink state主要分为keyed state和operator state 这些都需要保持起来,原来存储在hdfs 文件系统中,内存中,目前spark 和flink 都支持 RocksDB 的状态存储,spark 是在3.2.0版本后支持的存储。目的是利用 RocksDB 高性能存储和查询,来满足检查点大量数据。
1. 目前大数据领域已经在各个领域进行发展,在最初的 Lambda 到Kappa 再到批流一体,最后是湖仓一体等,这些都是在业务发展中最好的验证,一定是架构无法满足大多数的业务场景,才一次次演变,比如 Lambda 批处理和流处理是分开的,在最后查询的时候,需要合并。
Kappa 架构纯实时流计算,实时是有了,可是大部分数据还是需要进行历史计算,计算频度可以是1天,几个小时,大量的历史数据进行统计,这时候kappa 就无法满足历史数据计算。
批流一体 ,主要是spark 和flink 将批和流统一,一套API 进行计算,可是问题是解决存储,计算可以统一,但是存储要支持批和流。这时候就出来数据湖三剑客(hudi, iceberg ,deltalake)这三个产品不做介绍,网上自己查。
最后到湖仓一体,什么事湖仓一体,湖其实就是数据湖,仓就是数仓在数据湖上构建数据仓库
这些都是概念。
具体的做法就是在数据湖的组件上构建数据仓库,这个数据湖组件支持CAID,支持增删改查,hive 这种只能load数据,主要利用hudi 这种组件代替hive。hudi支持批和流,可以实时插入,实时查询,hive 不能实时插入,就这些,不要被高大上的概念给忽悠了。
从spark 3.2 的上面看到,流处理目前在开发接近flink,流处理也能达到1ms内 ,spark 重点是在sql 优化和AI 智能结合,如果你要开发AI,使用python进行数据科学研究,用spark 是最好的选择。
flink 的实时不用说,本身就是基于事件处理,目前发展主要集中在CDC 数据接入,实时应用(规则引擎,实时营销)等应用计算。在图计算和AI方面,目前还没有spark 好用。场景不一样,用的组件就不一样。
对两个组件的总结:按场景,各有各的优点,不能一下子说谁比谁好,spark 不会死,flink 也不可能什么都能做。目前大家都在做批流一体,实时处理,但是大部分业务都是近实时,没有太多实时要求那么变态,吞吐量上面spark 和flink 都差不多,flink 也没见有多快。如果不是翻倍的性能体验,哪些性能对比可以忽略。毕竟公司不是专门研究谁跑的快。是要把结果数据计算正确。
spark以目前Databricks 为首的公司,包括苹果,fackbook,亚马逊,微软,IBM等巨头都在使用,在社区活跃度上丝毫没有减少。所以哪些天天唱衰spark,鼓吹flink,用片面的说法来对比,没有太多意义,还会阻碍技术的发展,把用户带偏。
L