1.使用检查点(checkpoint)从失败中恢复
在出现故障或有意关闭后,可以使用检查点和写前日志来恢复查询的进度和状态,并从中断的地方继续。我们可以给查询配置一个检查点位置,这样查询会将所有的进度信息(即在每个触发器中处理的偏移范围)和正在运行的聚合(例如之前示例中的word count)保存到检查点的位置。检查点的位置必须是HDFS兼容文件系统中的一个路径,并且可以在启动查询时设置为DataStreamWriter中的一个选项。设置检查点示例:
aggDF
.writeStream
.outputMode("complete")
.option("checkpointLocation", "path/to/HDFS/dir")
.format("memory")
.start()
2.流查询更改后的语义恢复
在从相同检查点位置重新启动之间,允许流查询做哪些更改是有限制的。有几种更改是不允许或无效的。
①“允许”这个术语意味着可以进行指定的更改,但是其效果的语义是否定义良好取决于查询和更改。
②“不允许”这个术语意味着不应该进行指定的更改,因为重新启动的查询可能会失败,并出现不可预知的错误。
详细的更改说明:
1.输入源的数量或类型(即不同的源)的更改:这是不允许的。
2.输入源参数的更改:是否允许这样做以及更改的语义是否定义良好取决于源和查询。例如:
a)速率限制的添加/删除/更新是允许的,例如将spark.readStream.format("kafka").option("subscribe", "topic") 改为 spark.readStream.format("kafka").option("subscribe", "topic").option("maxOffsetsPerTrigger", ...)
b)通常不允许更改从kafka中读取数据的topic,因为结果不可预知,例如将spark.readStream.format("kafka").option("subscribe", "topic")

本文探讨了Spark Streaming中使用检查点恢复故障的方法,包括流查询更改的语义恢复限制,以及连续处理模式下的低延迟和容错保证。详细介绍了输入源、输出接收器、操作更改的限制,以及连续处理模式的支持查询类型。
最低0.47元/天 解锁文章
530

被折叠的 条评论
为什么被折叠?



