为什么卡夫卡消费者无视我最早的" auto.offset.reset参数中的指令,因此不会从绝对第一个事件中读取我的主题?

时间:2018-04-20 15:49:55

标签: java scala apache-spark apache-kafka kafka-consumer-api

我想从最早的事件中读到一个Kafka话题。

我想要做的是从主题(从最早的最早事件)到特定日期的事件获取所有数据。

每个事件的结构都有一个名为auto.offset.reset的字段,我将其用作过滤事件的阈值。到目前为止,我已成功完成了读写操作。我正在写一个临时的镶木地板文件,我用它作为Hive表的分区。这工作正常,但即使我在 // Configurations for kafka consumer val conf = ConfigFactory.parseResources("properties.conf") val brokersip = conf.getString("enrichment.brokers.value") val topics_in = conf.getString("enrichment.topics_in.value") // // Crea la sesion de Spark val spark = SparkSession .builder() .master("yarn") .appName("XY") .getOrCreate() spark.sparkContext.setLogLevel("ERROR") import spark.implicits._ val properties = new Properties properties.put("key.deserializer", classOf[StringDeserializer]) properties.put("value.deserializer", classOf[StringDeserializer]) properties.put("bootstrap.servers", brokersip) properties.put("auto.offset.reset", "earliest") properties.put("group.id", "XY") val consumer = new KafkaConsumer[String, String](properties) consumer.subscribe( util.Collections.singletonList("geoevents") ) 参数中指定了最早的,它也没有从头开始读取数据。

每当我运行我的代码时,我都会从此日期开始获取所有事件。每次我再次执行代码时,它都会继续读取上一次代码执行中读取的最后一个Kafka事件。

我用来配置Kafka Consumer并订阅主题的代码如下:

kafka-console-consumer --new-consumer --topic geoevents --from-beginning --bootstrap-server xx.yy.zz.xx 

但是,每当我从命令行创建使用者以便从主题中读取数据时,我都会获得前几天的所有事件。 我运行的命令行命令是:

"earliest"

为什么我的代码行为与此类似,忽略auto.offset.reset中的if (clicked.classList.contains("open")) { clicked.classList.remove("open"), clicked.classList.add("closed"); } if (clicked.classList.contains("open")) { clicked.classList.remove("open"); clicked.classList.add("closed"); }

3 个答案:

答案 0 :(得分:7)

这是因为auto.offset.reset仅在群组没有提交的偏移量时才会应用。

查看消费者配置documentation

  

当卡夫卡或当前没有初始偏移时该怎么办   服务器上不再存在偏移量

如果您想从头开始重启,您可以:

答案 1 :(得分:2)

仅当存储在Kafka中的给定使用者没有偏移时,才使用属性zvol。当您提交记录时,Kafka会将记录的偏移量存储在特殊主题中,并且在下一次运行中,您的使用者将从上次提交的偏移量中读取该主题。要从头开始阅读,您应拨打auto.offset.reset或使用唯一的consumer.seekToBeginning媒体资源。

答案 2 :(得分:0)

如果您想从第一个事件中读取所有分区的主题,则可以重置偏移量

kafka-consumer-groups --bootstrap-server <host-ip>:<port> --group <group-name> --reset-offsets --execute --to-earliest --topic <topic>