Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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_Apache Kafka_Spark Structured Streaming - Fatal编程技术网

Java Spark结构化流媒体中消费消息的跟踪

Java Spark结构化流媒体中消费消息的跟踪,java,apache-spark,apache-kafka,spark-structured-streaming,Java,Apache Spark,Apache Kafka,Spark Structured Streaming,我想设置我的应用程序跟踪来自kafka的已消费消息的配置。因此,无论何时失败,它都可以从上次提交或消耗的偏移量开始拾取 readStream .format("kafka") .option("kafka.bootstrap.servers", "host1:port1,host2:port2") .option("subscribe", "topic1") .load() .

我想设置我的应用程序跟踪来自kafka的已消费消息的配置。因此,无论何时失败,它都可以从上次提交或消耗的偏移量开始拾取

readStream
  .format("kafka")
  .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
  .option("subscribe", "topic1")
  .load()
  .selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)")
  .writeStream
  .format("kafka")
  .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
  .option("topic", "topic1")
  .trigger(Trigger.Continuous("1 second"))  // only change in query
  .start();
我在网上读到,
checkpointlocation
属性可以设置,spark可以使用它来跟踪偏移量

想知道在哪里可以设置此属性吗?我可以在
选项中设置上述代码吗?我可以知道如何正确设置它吗


其次,我无法理解
trigger(trigger.Continuous(“1秒”))
属性。Docs说,
连续处理引擎将每秒记录查询的进度
,它在从kafka读取消息时会记录什么样的进度?

您可以在
writeStream中将检查点位置设置为一个选项

[...]
.writeStream
  .format("kafka")
  .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
  .option("topic", "topic1")
  .option("checkpointLocation", "/path/to/dir")
  .trigger(Trigger.Continuous("1 second"))
  .start();
从Kafka读取时跟踪进度意味着跟踪TopicPartition中消耗的偏移量。设置检查点位置将使应用程序能够将该信息作为JSON对象存储在给定路径中,例如

{
  "topic1":{
    "0":11, 
    "1":101
  }
}
这意味着应用程序已经使用了主题
topic1
的分区
0
中的偏移量10和分区
1
中的偏移量100。检查点是“提前”写入的(使用提前写入日志),因此应用程序将继续从Kafka读取消息,在预期或非预期(失败)重新启动之前,该消息已停止

自Spark 2.3版起,就可以使用
触发器.Continuous
。现在被标记为实验性的。与微批处理方法相比,它将在Kafka中的每一条消息到达主题后立即获取,而不尝试将其与其他消息一起批处理。这可以改善延迟,但很可能会降低总体吞吐量

参数(例如
1秒
)确定检查点的频率

使用此触发模式时,重要的是至少要有与主题分区相同数量的可用内核。否则,应用程序将不会取得任何进展。您可以阅读更多关于它的信息:

例如,如果您正在阅读具有10个分区的Kafka主题,则群集必须至少具有10个核心,查询才能进行


是的,checkpointLocation被添加到选项中,但它需要一个与HDFS兼容的文件系统,如HDFS或S3。那么,您的意思是,一旦卡夫卡在故障后重新启动,它将从卡夫卡获取所有(已使用+新的)消息?它将继续在故障前停止的位置使用消息。有关已使用消息的信息将提前写入,并且仅在处理成功时提交。记住,结构化流媒体意义上的“提交”并不意味着提交回卡夫卡,而是提交到ist检查点位置。