簡體   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