我正在尝试编写一个Kafka使用者以从一开始就使用消息。我可以使用--from-beginning
从控制台使用者那里做同样的事情但是我在JAVA API中找不到相应的属性。
def consumeFromKafka(topic: String) = {
val props = new Properties()
props.put("bootstrap.servers", "localhost:9092")
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
props.put("auto.offset.reset", "latest")
props.put("group.id", "consumer-group")
val consumer: KafkaConsumer[String, String] = new KafkaConsumer[String, String](props)
consumer.subscribe(util.Arrays.asList(topic))
while (true) {
val record = consumer.poll(1000).asScala
for (data <- record.iterator)
println(data.value())
}
}
还有一个问题,关于Avro消息的value.deserializer应该是什么?
答案 0 :(得分:2)
--from-beginning
中使用的影响kafka-console-consumer
可以通过将auto.offset.reset
设置为earliest
来实现。与唯一/新的group.id
结合使用,效果相同。
基本上,您想创建一个新的使用者组(通过group.id
),并且由于Kafka Broker不知道该使用者组,因此它会根据配置auto.offset.reset
自动为该使用者组重置偏移量。设置为earliest
时将从头开始。设置为latest
时,它将等待新的传入数据。
关于Avro反序列化,此here可能会有所帮助。