Kafka无法从头开始阅读--Java

时间:2017-03-28 15:28:48

标签: java apache-kafka kafka-consumer-api kafka-producer-api

我是kafka的新手,并尝试使用kafka构建一个生产者 - 消费者应用程序。在这里,我能够向kalka发送消息,但是当我尝试使用消费者消费它时,它返回0条记录。

我检查了我的消费者组的偏移量,我可以看到偏移等于记录长度是相同的(在我的情况下是1M - 与记录数相同)。

如果我在创建消费者时使用此配置属性,则从头开始阅读。

configProperties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");

但我的要求是,如果我重启消费者,它应该从前一个终点开始,如AMQ。

这里有什么我想念的。我认为抵消只有在消费者民意调查后才能改变。为什么它在开始时设置为最大记录长度?

1 个答案:

答案 0 :(得分:5)

如链接所述,您需要考虑几种情况:

  1. 启动一个新的消费者(新group.id):对于这种情况,将没有提交的偏移量,因此消费者开始根据参数设置auto.offset.reset

    进行读取
  2. 重新启动消费者(重用group.id):对于这种情况,消费者将从中断的地方恢复。参数设置auto.offset.reset将被忽略。

  3. 因此,对于方案(1),您可以“配置”#34;你的起始位置。对于方案(2),您的起始位置是"固定" (即,总是最后提交的偏移量),这不能通过配置进行更改。但是,在您第一次致电.seekToBeginning()之前,您总是可以执行.seekToEnd()poll(),并且可以阅读整个主题,也可以从主题末尾开始。致.seekXX()的呼叫将"覆盖"最后提交的偏移量,允许您开始使用您喜欢的任何偏移量。注意,还有seek()采用"偏移参数"所以你可以指定你想要开始消费的任何偏移量。