结构化流的检查点周期是多久一次,是否可配置?

时间:2018-02-16 12:06:57

标签: apache-spark apache-kafka offset spark-structured-streaming

我正在为我们的数据转发工作制定案例,以便从Spark批处理切换到结构化流程。我们使用Kafka源和由套接字连接组成的foreach接收器。

使用批量流式传输时,我试图通过在套接字的每个ACK上存储zokeeper中的偏移量来强制执行一次性语义,但由于我们的偏移管理,它很可能每周几次中断生产吞吐量。我现在已经从频繁的海报Jacek Laskowski那里得到关于抵消管理的注意事项:

  

你根本不应该处理这种称为偏移的低级“事物”,Spark结构流用来提供一次保证。

据我所知,由于套接字不是幂等的,我们无法保证通过HDFS检查点完成一次语义。我已经读过,对于结构化,每次触发都会检查偏移量,但是在没有检查点的试运行期间,我每隔25ms就会看到触发持续时间。

结构化流媒体是否真的能够每隔25ms存储一次偏移,这个检查点周期是否可以从结构化流媒体视角进行配置?请记住,我还没有在我们的火花工人身上安装HDFS,所以如果从HDFS方面进行简单配置,我就为长期问题道歉:)

1 个答案:

答案 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()