【发布时间】:2017-01-20 11:30:51
【问题描述】:
我写了一个 Java Kafka Consumer。我想确定如何明确确保一旦 Kafka Consumer 启动,它只会读取生产者从那时起发送的消息,即它不应该读取生产者已经发送给 Kafka 的任何消息。谁能解释如何确保这一点? :
这是我使用的属性的 sn-p
Properties properties = new Properties();
properties.put("zookeeper.connect", zookeeperHost);
properties.put("group.id", group);
properties.put("auto.offset.reset","largest");
ConsumerConfig consumerConfig = new ConsumerConfig(properties);
consumerConnector = Consumer.createJavaConsumerConnector(consumerConfig);
9 月 14 日更新:
我正在使用以下属性,似乎消费者有时仍然从头开始阅读,有人可以告诉我现在出了什么问题吗?
我正在使用 Kafka 版本 0.8.2
properties.put("auto.offset.reset","largest");
properties.put("auto.commit.enable","false");
【问题讨论】:
-
你已经做到了。 properties.put("auto.offset.reset","largest");
-
您还应该关闭自动提交并且永远不要手动提交,因为在这种情况下,您的消费者将在重新启动后忽略
auto.reset.offset配置并取而代之的是提交的偏移量。 -
@serejja 感谢您的意见
-
@ShawnGuo 感谢您的输入,我认为这似乎适用于这两个属性集。
-
@ShawnGuo 请查看我的更新,我无法识别模式,但即使使用这些属性,它似乎也无法始终如一地工作。
标签: java apache-kafka kafka-consumer-api