在Spark结构化流传输过程中跳过批次

时间:2019-02-27 10:01:32

标签: scala apache-spark spark-structured-streaming azure-eventhub

我有一个火花结构化的流作业,它使用了来自azure事件中心服务的事件。在某些情况下,流作业未处理某些批次。在这种情况下,可以在结构化流日志中看到以下日志语句:

  

INFO FileStreamSink:跳过已提交的批次25

流作业将传入的事件持久保存到Azure Datalake中,因此我可以检查实际上已经处理/持久了哪些事件。当上述跳过发生时,这些事件将丢失!

我不清楚,为什么将这些批次标记为已提交,因为最终似乎未处理它们!

您知道什么可能导致这种行为吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

我可以解决问题。问题是我有两个不同的流作业,它们的检查点位置不同(这是正确的),但它们的输出使用相同的基本文件夹。但是在输出文件夹中还保存了元信息,因此这两个流共享了他们已经提交的批处理信息。使用其他基本输出文件夹后,此问题已解决。

答案 1 :(得分:1)

我们遇到了同样的问题,Kafka经纪人已经删除了数据。因此,为强制Spark应用程序从头开始(Kafka中的最新偏移量),我们删除了checkpoint_spark_metadata目录。您可以在编写流的同一路径中找到_spark_metadata