Spark Streaming概念特性介绍
通过之前的文章我们了解了Structured Streaming是建立在SparkSQL引擎之上的可伸缩和高容错的流式处理引擎,那么Spark Streaming又是何方神圣呢?Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的、具备容错机制的实时流数据的处理。支持从多种数据源获取数据,包括Kafka、Flume、以及TCP socket等,从数据源获取数据之后,可以使用诸如map、reduce和window等高级函数进行复杂算法的处理。最后还可以将处理结果存储到文件系统和数据库等
Spark Streaming处理的数据流图:
Spark Streaming接收流式数据,并根据一定的时间间隔拆分成一批批batch数据,用抽象接口DStream表示(DStream可以看成是一组RDD序列,每个batch对应一个RDD),然后通过Spark引擎处理这些batch数据,最终得到处理后的一批批结果数据。处理过程的流程图如下:
Structured Streaming相比Spark Streaming的优势:
1.支持1ms延迟级别的实时流,Spark2.3之后引入了实时流处理模式,虽然还处在实验阶段,但不久之后完全可以期待达到大规模使用的程度。
2.与离线计算API的统一,DStream 和 RDD 看起来很相似,但其实是两个不同的东西,DStream是对RDD在流式计算的里的Wrap。所以流式和批处理,你其实比较难复用的。但是在Structured Streaming中,都是对Dataframe/DataSet的操作,复杂逻辑处理会很容易的在批处理和流式计算中复用。
3.同样能支持Spark Streaming的输入源于输出接收器。
4.Spark Streaming已经进入维护状态,基本不再更新。
5.基于事件时间,相比于Spark Streaming更符合业务场景,处理更精确。
6.解决了Spark Streaming存在的代码升级,DAG图变化引起的任务失败,无法断点续传的问题(Spark Streaming的硬伤!!!)
总结
就像RDD与DataSet一样,Spark的新版本虽然还兼容RDD和Spark Streaming的使用,但官方一定希望我们去积极尝试新事物,更多去使用升级版的DataSet与Structured Streaming,所以我这个系列里也要跟上Spark官方的节奏,关于Spark Streaming的就鸽了,不再深入去剖析。也希望大家在新项目上更多拥抱新组件新特性,不辜负官方的良苦用心。
最后,新年快乐!米娜桑。