我想从最早的事件中读到一个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");
}
?
答案 0 :(得分:7)
这是因为auto.offset.reset
仅在群组没有提交的偏移量时才会应用。
查看消费者配置documentation:
当卡夫卡或当前没有初始偏移时该怎么办 服务器上不再存在偏移量
如果您想从头开始重启,您可以:
使用新的群组名称(例如将System.currentTimeMillis()
附加到群组匿名)
使用seekToBeginning()
显式将使用者的位置移至分区的开头:http://kafka.apache.org/11/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#seekToBeginning-java.util.Collection-
答案 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>