我正在使用Kafka网站上的ConsumerGroupExample代码测试Kafka High Level Consumer。我想检索我在Kafka服务器配置中名为“test”的主题的所有现有消息。查看其他博客,auto.offset.reset应设置为“最小”,以便能够获取所有消息:
private static ConsumerConfig createConsumerConfig(String a_zookeeper, String a_groupId) {
Properties props = new Properties();
props.put("zookeeper.connect", a_zookeeper);
props.put("group.id", a_groupId);
props.put("auto.offset.reset", "smallest");
props.put("zookeeper.session.timeout.ms", "10000");
return new ConsumerConfig(props);
}
我真正的问题是:高级消费者的等效Java api调用相当于:
bin / kafka-console-consumer.sh --zookeeper localhost:2181 - topic test - from-beginning
答案 0 :(得分:7)
基本上,每当新消费者尝试使用主题时,它都会从头开始阅读消息。如果您每次都是为了测试而从头开始消费,那么每次使用新的groupID初始化您的消费者时,它都会从头开始阅读消息。以下是我的表现方式:
properties.put("group.id", UUID.randomUUID().toString());
每次都从头开始阅读邮件!
答案 1 :(得分:5)
看起来您需要使用“低级SimpleConsumer API”
对于大多数应用程序,高级消费者Api足够好。 某些应用程序需要未向高级别消费者公开的功能 (例如,在重新启动消费者时设置初始偏移)。他们能 而是使用我们的低级SimpleConsumer Api。逻辑将是一点点 更复杂,您可以按照here中的示例进行操作。
此示例适用于从主题获取具有以下参数的所有消息:(请注意,端口是Kafka端口,而不是ZooKeeper端口,从this example设置的主题):
10 my-replicated-topic 0 localhost 9092
具体来说,有一种获取readOffset的方法,它采用kafka.api.OffsetRequest.EarliestTime():
long readOffset = getLastOffset(consumer,a_topic, a_partition, kafka.api.OffsetRequest.EarliestTime(), clientName);
以下是另一篇文章,可能会提供一些有关如何对其进行排序的其他想法:How to get data from old offset point in Kafka?
答案 2 :(得分:2)
要从头开始获取消息,您可以执行以下操作:
import kafka.utils.ZkUtils;
ZkUtils.maybeDeletePath("zkhost:zkport", "/consumers/group.id");
然后按照例行工作......
答案 3 :(得分:0)
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("auto.offset.reset", "earliest");
props.put("group.id", UUID.randomUUID().toString());
此属性可以帮助您。