Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spark结构化流媒体:当前批次落后_Java_Apache Spark_Spark Structured Streaming - Fatal编程技术网

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

Java Spark结构化流媒体:当前批次落后,java,apache-spark,spark-structured-streaming,Java,Apache Spark,Spark Structured Streaming,它的实现似乎非常简单,但似乎存在一些问题 此作业从kafka主题读取偏移量(ui事件数据),进行一些聚合并将其写入Aerospike数据库 在高流量的情况下,我开始看到作业运行正常但没有插入新数据的问题。查看日志,我看到以下警告消息: 当前批次落后。触发间隔为30000毫秒,但花费了43491毫秒 有几次工作继续写数据,但我可以看到计数很低,这表明有一些数据丢失 代码如下: Dataset<Row> stream = sparkSession.readStream()

它的实现似乎非常简单,但似乎存在一些问题

此作业从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();
Dataset-stream=sparkSession.readStream()
.格式(“卡夫卡”)
.option(“kafka.bootstrap.servers”,kafkaBootstrapServersString)
.选项(“订阅”,newTopic)
.选项(“起始偏移量”、“最新”)
.option(“enable.auto.commit”,false)
.选项(“failOnDataLoss”,false)
.load();
StreamingQuery=stream
.writeStream()
.选项(“起始偏移量”、“最早”)
.outputMode(outputMode.Append())
.foreach(水槽)
.trigger(触发器处理时间(触发器间隔))
.queryName(queryName)
.start();

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

有关卡夫卡配置的更多详细信息,请参阅下面的链接


Apache Spark不是流处理的好选择。我建议使用ApacheFlink或ApacheStorm。ApacheFlink非常易于使用,它的API类似于Spark,但是内部完全不同。