Spark Structured Streaming能否不依赖HDFS运行?检查点可自行管理吗?
问题1:Spark Structured Streaming是否可以不依赖HDFS运行
完全可以不依赖HDFS运行。
所谓检查点默认支持HDFS是常见误解:Spark Structured Streaming的检查点机制本质是适配所有实现了org.apache.hadoop.fs.FileSystem接口的存储系统,HDFS只是可选的实现之一,纯Kafka流处理场景完全可以全程不涉及HDFS,检查点可根据场景选择其他存储:
- 本地测试场景:直接使用本地文件路径作为检查点路径,单节点测试无额外依赖,集群模式下可挂载共享NAS路径保证所有Executor可访问
- 生产场景:可选用各类对象存储(S3、阿里云OSS、腾讯云COS等)作为检查点存储,无需部署HDFS集群
问题2:能否关闭Spark自带的检查点机制,由应用程序自行管理检查点逻辑
可以关闭,有两类落地路径可选:
路径1:完全关闭自带检查点
只要不在代码中配置checkpointLocation参数,Spark就不会自动生成、维护检查点文件。这种方案适合两类场景:
- 无状态计算场景:不需要维护窗口聚合、去重、流join等状态,仅需要自行管理Kafka消费偏移量即可,你可以将偏移量存储到Kafka自定义Topic、MySQL、Redis等任意介质中,作业重启时通过Kafka数据源的
startingOffsets参数指定消费位置启动即可 - 全自定义状态管理场景:如果用到有状态计算,你可以放弃Spark自带的状态算子,自行在处理逻辑中实现状态的存储、更新、恢复逻辑,存储介质可以自由选择,包括你提到的Kafka
注意:该方案下所有状态、偏移量的一致性保证都需要业务逻辑自行实现,Spark不会提供自动容错能力。
路径2:保留检查点机制自定义存储介质
如果你不想重写状态、偏移量的管理逻辑,又希望将检查点存储到Kafka中,可以自定义实现org.apache.hadoop.fs.FileSystem接口,封装Kafka的读写逻辑作为自定义文件系统实现,在Spark配置中添加spark.hadoop.fs.kafka.impl参数指向你实现的类之后,即可直接使用kafka://开头的路径作为checkpointLocation,上层业务代码不需要做任何改造,Spark 2.4.7版本完全支持该扩展方式。
内容的提问来源于stack exchange,提问作者DGALLENE
相关产品推荐
相关产品推荐

