Apache kafka Spark Structured Streaming:以批处理查询方式读取卡夫卡主题中的前N条消息

Apache kafka Spark Structured Streaming:以批处理查询方式读取卡夫卡主题中的前N条消息,apache-kafka,spark-structured-streaming,Apache Kafka,Spark Structured Streaming,我有一个要求,我想在触发卡夫卡主题的流作业之前对其进行采样(用于检查其数据质量等)。采样的一个参数可能是消息数 我指的是“http://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html#creating-a-kafka-source-for-batch-querys“但只找到了这些方法,”startingoffset“和endingoffset”。由于偏移量不需要连续(在压缩或删除消息的情况下),因此

我有一个要求,我想在触发卡夫卡主题的流作业之前对其进行采样(用于检查其数据质量等)。采样的一个参数可能是消息数

我指的是“http://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html#creating-a-kafka-source-for-batch-querys“但只找到了这些方法,”startingoffset“和endingoffset”。由于偏移量不需要连续(在压缩或删除消息的情况下),因此无法从中读取前N条消息


寻求任何建议或帮助。谢谢。

参考您的帖子,您不需要构建流媒体应用程序。您希望创建一个批处理作业,该批处理作业将执行数据质量控制

KafkaUtils.createRDD
方法可以帮助传递要从Kafka提取的偏移范围。它为每个Kafka分区获取偏移范围数组。借助这些方法,可以配置要从Kafka主题中提取的消息数量

下面的代码将从Kafka主题中读取10条消息(每个分区5条消息):

注意:Kafka TTL将从主题中删除消息,因此您需要小心设置偏移量,以便应用程序尝试以其他方式获取不存在的消息。理想情况下是使用Kafka消费者界面中的方法


您可以在Spark文档中找到更多信息:

引用您的帖子,您不需要构建流媒体应用程序。您希望创建一个批处理作业,该批处理作业将执行数据质量控制

KafkaUtils.createRDD
方法可以帮助传递要从Kafka提取的偏移范围。它为每个Kafka分区获取偏移范围数组。借助这些方法,可以配置要从Kafka主题中提取的消息数量

下面的代码将从Kafka主题中读取10条消息(每个分区5条消息):

注意:Kafka TTL将从主题中删除消息,因此您需要小心设置偏移量,以便应用程序尝试以其他方式获取不存在的消息。理想情况下是使用Kafka消费者界面中的方法


您可以在Spark文档中找到更多信息:

谢谢Alex。你答案的最后一部分正是我的问题。由于偏移量可能会因压缩或删除而更改,我无法100%确定要读取的起始偏移量和结束偏移量。您可以使用
beginingoffsets
获取卡夫卡中的第一条可用消息,并使用
endOffsets
获取卡夫卡中的最后一条可用消息(可用下我的意思是消息仍在卡夫卡中).谢谢你,亚历克斯。你答案的最后一部分正是我的问题。由于偏移量可能会因压缩或删除而更改,我无法100%确定要读取的起始偏移量和结束偏移量。您可以使用
beginingoffsets
获取卡夫卡中的第一条可用消息,并使用
endOffsets
获取卡夫卡中的最后一条可用消息(可用下我的意思是消息仍在卡夫卡中)。
val offsetRanges = Array(
  // topic, partition, inclusive starting offset, exclusive ending offset
  OffsetRange("topic_name", 0, 0, 5),
  OffsetRange("topic_name", 1, 0, 5)
)

val rdd = KafkaUtils.createRDD[String, String](sparkContext, kafkaParams, offsetRanges, PreferConsistent)