Kafka消费者财产从一个主题开始

时间:2020-04-06 11:07:59

标签: scala apache-kafka kafka-consumer-api avro

我正在尝试编写一个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应该是什么?

1 个答案:

答案 0 :(得分:2)

--from-beginning中使用的影响kafka-console-consumer可以通过将auto.offset.reset设置为earliest来实现。与唯一/新的group.id结合使用,效果相同。

基本上,您想创建一个新的使用者组(通过group.id),并且由于Kafka Broker不知道该使用者组,因此它会根据配置auto.offset.reset自动为该使用者组重置偏移量。设置为earliest时将从头开始。设置为latest时,它将等待新的传入数据。

关于Avro反序列化,此here可能会有所帮助。