Spark Streaming不尊重auto.offset.reset =“smallest”或group.id?

时间:2016-10-31 10:11:33

标签: apache-spark apache-kafka ibm-cloud data-science-experience dsx

我正在Spark 1.6中创建一个Kafka流:

kafkaProps.setConfig("group.id", UUID.randomUUID().toString())

kafkaProps.createConfiguration()
kafkaProps.toImmutableMap.foreach {keyVal => println(keyVal._1 + "=" + keyVal._2)}

val ssc = new StreamingContext( sc, Seconds(2) ) 
val stream = ssc.createKafkaStream[String, String,  StringDeserializer, StringDeserializer](
                     kafkaProps,
                     List(kafkaProps.getConfig("kafka.topic"))
                     )
stream.print()

ssc.start()
ssc.awaitTerminationOrTimeout(30000)
ssc.stop(stopSparkContext=false, stopGracefully=true)

kafkaProps包含:

...
group.id=3abedbf7-2aed-436a-b4bc-0517a9c5c419
...
auto.offset.reset=smallest
...

group.id 每次运行代码时都会更改它的值。我认为这足以在每次从Kafka消费时运行我的应用程序时将偏移量重置为零,但不会检索主题中的旧项目。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

自从提出这个话题以来,似乎已经过去了很多年。但是,我想为将要使用它的其他人回答。

答案是streaming-kafka-010会忽略“ auto.offset.reset”,如果没有则将其设置为“ none”。

您可以在org.apache.spark.streaming.kafka010.KafkaUtil的fixKafkaParams方法中找到这段代码。

logWarning(s"overriding ${ConsumerConfig.AUTO_OFFSET_RESET_CONFIG} to none for executor")
kafkaParams.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "none")

有关org.apache.spark.streaming.kafka010.KafkaRDD中的覆盖的进一步说明,其中重新检查了“ auto.offset.rest”的值。

require("none" ==    kafkaParams.get(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG).asInstanceOf[String],
ConsumerConfig.AUTO_OFFSET_RESET_CONFIG +
  " must be set to none for executor kafka params, else messages may not match offsetRange")

通常,KafkaStreaming不支持“ auto.offset.reset”

答案 1 :(得分:0)

您是否尝试'最早'而不是'最小'作为值?

https://kafka.apache.org/documentation#configuration

[最新,最早,无]是新消费者的价值

[最小,最大]是旧消费者的值

答案 2 :(得分:0)

我无法找到方法StreamingContext#createKafkaStream的定义。你能澄清一下你在哪里找到它吗?

尝试使用Spark official documentation

中提到的KafkaUtils创建Kafka流
val directKafkaStream = KafkaUtils.createDirectStream[
     [key class], [value class], [key decoder class], [value decoder class] ](
     streamingContext, [map of Kafka parameters], [set of topics to consume])