繁体   English   中英

如何在通过 Spark Streaming Scala 使用来自 Kafka 主题的消息时设置特定的偏移量

[英]How to set specific offset number while consuming message from Kafka topic through Spark streaming Scala

我正在使用下面的 spark streaming Scala 代码来消费来自生产者主题的实时 kafka 消息。 但问题是有时我的工作由于服务器连接或其他原因而失败,并且在我的代码中自动提交属性设置为真,因为某些消息丢失并且无法存储在我的数据库中。

所以只想知道如果我们想从特定的偏移量中提取旧的 kafka 消息,有什么办法。 我试图将“auto.offset.reset”设置为最早或最新,但它只获取尚未提交的新消息。

让我们在这里举个例子,比如我当前的偏移量是 1060,自动偏移重置属性是最早的,所以当我重新启动我的工作时,它开始从 1061 读取消息,但在某些情况下,如果我想从偏移量 1020 读取旧的 kafka 消息,那么是我们可以使用任何属性从特定偏移量开始使用消息

import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.streaming.kafka010.ConsumerStrategies.Subscribe
import org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent
import org.apache.spark.streaming.StreamingContext._ 


val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
val ssc = new StreamingContext(conf, Seconds(1))

val topic = "test123"
val kafkaParams = Map(
  "bootstrap.servers" -> "localhost:9092",
  "key.deserializer" -> classOf[StringDeserializer],
  "value.deserializer" -> classOf[KafkaAvroDeserializer],
  "schema.registry.url" -> "http://abc.test.com:8089"
  "group.id" -> "spark-streaming-notes",
  "auto.offset.reset" -> "earliest"
  "enable.auto.commit" -> true
)


val stream = KafkaUtils.createDirectStream[String, Object](
ssc,
PreferConsistent,
Subscribe[String, Object](topic, KafkaParams)

stream.print()

ssc.start()
ssc.awaitTermination()

从 Spark Streaming,你不能。 您需要使用kafka-consumer-groups CLI 来提交特定于您的组 ID 的偏移量。 或者手动构造一个 KafkaConsumer 实例并在启动 Spark 上下文之前调用 commitSync。

import org.apache.kafka.clients.consumer.KafkaConsumer

val c = KafkaConsumer(...)
val toCommit: java.util.Map[TopicPartition,OffsetAndMetadata] = ...
c.commitSync(toCommit) // But don't do this every run of your app

ssc.start()

或者,Structured Streaming确实提供startingOffsets配置。

auto.offset.reset 仅适用于不存在的 group.id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM