内容来自于林子雨老师的《Spark编程基础》和一些自己的学习笔记。
Structured Streaming是一种基于Spark SQL引擎构建的、可扩展且容错性高的流处理引擎。这里我把它理解为,因为Spark不能处理毫秒级流计算而诞生的流处理引擎。因此Structured Streaming采用的数据抽象是DataFrame而不是DStream。
设计了输入源、执行引擎、和接收器。通过偏移量来跟踪流的读取位置,同时引擎可以使用检查点和预写日志来记录数据的偏移范围,来达到一致性。
Structed Streaming的关键思想是将试试数据流视为一张正在不断添加数据的表。流计算等同于在一张静态表上批处理查询,并进行增量查询。
包括两个处理模型,微批处理模型和持续处理模型,默认是微批处理模型。
微批处理模型,流计算引擎在处理上一批次数据结束后,再对新数据进行批量查询。在下一个微批处理之前,要将数据的偏移范围保存在日志中。所以,当前到达的数据需要在上一批次处理完,同时偏移范围记录到日志后,才能下一个批次数据继续处理,因此会有一定的延迟。书中表示延迟超过100毫秒。
持续处理模型,可以实现毫秒级延迟。启动一系列的连续读取、处理和写入结果任务。对于偏移范围的记录异步写入日志,以达到连续处理,避免高延迟。但这是建立在牺牲一致性为代价上的,低延迟下,会丢失数据。
DataFrame/Dataset的writeStrem()方法返回DataStreamWriter接口,接口启动流计算,并写入外部的输出接收器。不同的接收器存在不同的选项。
示例代码
quert = wordcount
.writeStream
.outputMod("update") //输入模式
.format("console")
.option() //配置
.trigger() //触发间隔
.start()
输出模式有Append模式,Complete模式,Update模式。
内置的输出接收器有File接收器、Kafka接收器、Foreach接收器、Console接收器、Memory接收器。
Spark通过将程序划分为输入源、执行引擎和接收器等多个层次来保障容错。
输入源通过偏移量标记,执行引擎通过检查点保存中间结果,接收器使用幂等来保障输出的稳定性。
原文:https://www.cnblogs.com/chenshaowei/p/12821884.html