本文对Spark Streaming和Structured Streaming在流模型、API使用、时延性能以及和Kafka对接等方面进行了对比,如下表所示:
1、流模型
Spark Streaming
Spark Streaming使用“微批次”的架构,把流式计算当作一系列连续的小规模批处理来对待。Spark Streaming从各种输入源中读取数据,并把数据分组为小的批次,新的批次按均匀的时间间隔创建出来。在每个时间区间开始的时候,一个新的批次就创建出来,在该区间内收到的数据都会被添加到这个批次中。在时间区间结束时,批次停止增长。时间区间的大小是由批次间隔这个参数决定的,批次间隔一般设在500毫秒到几秒之间,由应用开发者配置。每个输入批次都形成一个RDD,以Spark作业的方式处理并生成其他的RDD。处理的结果可以以批处理的方式传给外部系统。
Structured Streaming
Structured Streaming中的关键思想是将实时数据流当作可以连续追加的表,这样可以将流计算以静态表的方式进行处理。
在Structured Streaming中将input data stream作为“input table”,对input table查询会生成一个“result table”。在每次查询时候,新的记录会追加到input table中,同时也会更新到Result Table中,当result table更新的时候,这些更新的数据需要写到外部存储中。
Output有不同的模式:
Complete mode:整个更新的result table写到外部存储
Append mode:上一次写入以来新的追加数据写到外部存储
Update mode:上一次写入以来新的更新数据写到外部存储
2、API使用
2.1 Spark Streaming API使用
1)Input Streaming
Spark Streaming有两种内置的Streaming源:
Basic source:StreamingContext API可用的源,比如文件系统、socket连接
Advanced source: