Spark结构化流:当前批次落后

时间:2018-12-03 18:18:41

标签: java apache-spark spark-structured-streaming

这似乎是非常简单的实现,但是看起来有些问题。

此作业从kafka主题读取偏移量(ui事件数据),进行一些汇总并将其写入Aerospike数据库。

在流量很高的情况下,我开始看到此问题,其中作业运行正常,但没有插入新数据。查看日志,我看到以下警告消息:

  

当前批次落后。触发间隔为30000毫秒,但花费了43491毫秒

很少有工作恢复写数据,但是我看到计数低,这表明存在一些数据丢失。

代码如下:

Dataset<Row> stream = sparkSession.readStream()
          .format("kafka")
          .option("kafka.bootstrap.servers", kafkaBootstrapServersString)
          .option("subscribe", newTopic)
          .option("startingOffsets", "latest")
          .option("enable.auto.commit", false)
          .option("failOnDataLoss", false)
          .load();
StreamingQuery query = stream
        .writeStream()
        .option("startingOffsets", "earliest")
        .outputMode(OutputMode.Append())
        .foreach(sink)
        .trigger(Trigger.ProcessingTime(triggerInterval))
        .queryName(queryName)
        .start();

1 个答案:

答案 0 :(得分:0)

您可能需要处理maxOffsetsPerTrigger才能调整每批的总输入记录。否则,您的应用程序上的延迟可能会在一个批次中带来更多记录,因此会减慢下一个批次的速度,从而在随后的批次中带来更多的延迟。

有关Kafka配置的更多详细信息,请参见下面的链接。

https://spark.apache.org/docs/2.4.0/structured-streaming-kafka-integration.html