我正在为我们的数据转发工作制定案例,以便从Spark批处理切换到结构化流程。我们使用Kafka源和由套接字连接组成的foreach
接收器。
使用批量流式传输时,我试图通过在套接字的每个ACK上存储zokeeper中的偏移量来强制执行一次性语义,但由于我们的偏移管理,它很可能每周几次中断生产吞吐量。我现在已经从频繁的海报Jacek Laskowski那里得到关于抵消管理的注意事项:
你根本不应该处理这种称为偏移的低级“事物”,Spark结构流用来提供一次保证。
据我所知,由于套接字不是幂等的,我们无法保证通过HDFS检查点完成一次语义。我已经读过,对于结构化,每次触发都会检查偏移量,但是在没有检查点的试运行期间,我每隔25ms就会看到触发持续时间。
结构化流媒体是否真的能够每隔25ms存储一次偏移,这个检查点周期是否可以从结构化流媒体视角进行配置?请记住,我还没有在我们的火花工人身上安装HDFS,所以如果从HDFS方面进行简单配置,我就为长期问题道歉:)
答案 0 :(得分:1)
您可以按如下方式配置触发频率:
import org.apache.spark.sql.streaming.Trigger
val query = resultTable
.writeStream
.outputMode(OutputMode.Update())
.option("checkpointLocation", "hdfs://path/to/checkpoints")
.trigger(Trigger.ProcessingTime(10.seconds))
.foreach(writer)
.start()
query.awaitTermination()