🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客
🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。
🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频
根据前文描述我们知道Flink主要处理的是流数据,针对的是实时计算领域,在Flink之前,大数据实时领域中还有Storm、SparkStreaming。Storm是比较早的流式计算框架,后来又出现了SparkStreaming,为了支持SQL Spark后期又推出StructuredStreamig,现在又出现了Flink这种优秀的实时计算框架,那么这几种计算框架到底有什么区别呢?下面我们从不同角度来对比下三个实时计算框架:
- 模型:Storm和Flink是真正的一条一条处理数据,而SparkStreaming是微批批处理,一次处理一批数据(小批量),后期Spark推出的StructuredStreaming支持微批处理也支持连续处理(Continuous),目前还处于实验性,实时性不如Flink。
- API:Storm使用基础API进行开发,比如实现一个简单的sum求和操作需要自己编写很多业务逻辑;而SparkStreaming、StructuredStreaming和Flink中都提供封装后的高阶函数,可以直接来使用,非常方便。
- SQL支持:早期Storm处理流数据不支持SQL,最新版本支持SQL处理流数据,SparkStreaming不支持SQL处理,后期Spark推出的StructuredStreaming支持SQL处理流式数据,Flink也是支持SQL处理实时数据。
- EventTime支持:Storm早期和SparkStreaming实时数据处理不支持事件时间,Storm后期实时数据处理支持事件时间,同样Spark后期推出的StructuredStreaming处理流数据也是支持事件时间,Flink诞生开始处理实时数据就支持事件时间。
- 保证次数:在数据处理方面,Storm可以实现至少处理一次,但不能保证仅处理一次,这样就会导致数据重复处理问题,所以针对计数类的需求,可能会产生一些误差,SparkStreaming、StructuredStreaming和Flink支持Exactly-once数据处理语义。
- 容错机制:Storm可以通过ACK机制实现数据的容错机制,而SparkStreaming、StructuredStreaming和Flink可以通过CheckPoint机制实现容错机制。
- 状态管理:Storm中没有实现状态管理,SparkStreaming实现了基于DStream的状态管理,StructuredStreaming支持基于Dataset/DataFrame的状态管理,而Flink实现了基于操作的状态管理。
- 延时:表示数据处理的延时情况,Storm和Flink接收到一条数据就处理一条数据,其数据处理的延时性是很低的;SparkStreaming和StructuredStreaming都支持微批处理,数据处理的延时性相对会偏高,虽然StructuredStreaming支持Continuous连续处理,但是目前处于实验阶段,数据处理延迟性相对Flink偏高,Flink实时数据处理延迟最低。
- 吞吐量:Storm的吞吐量其实也不低,只是相对于其他几个框架而言较低;SparkStreaming、StructuredStreaming和Flink的吞吐量是比较高的。