Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka Kafka高级使用者使用JavaAPI从主题中获取所有消息(相当于--从头开始)_Apache Kafka_Java_Consumer - Fatal编程技术网

Apache kafka Kafka高级使用者使用JavaAPI从主题中获取所有消息(相当于--从头开始)

Apache kafka Kafka高级使用者使用JavaAPI从主题中获取所有消息(相当于--从头开始),apache-kafka,java,consumer,Apache Kafka,Java,Consumer,我正在使用Kafka站点上的ConsumerGroupExample代码测试Kafka高级消费者。我想检索Kafka服务器配置中关于“test”主题的所有现有消息。查看其他博客,auto.offset.reset应设置为“最小”,以便能够获取所有消息: private static ConsumerConfig createConsumerConfig(String a_zookeeper, String a_groupId) { Properties props = new Pr

我正在使用Kafka站点上的ConsumerGroupExample代码测试Kafka高级消费者。我想检索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--zookeer localhost:2181--主题测试--从一开始

看起来您需要使用“低级SimpleConsumer API”

对于大多数应用程序,高级消费Api已经足够好了。 一些应用程序希望功能不向高级消费者公开 但是(例如,重新启动耗电元件时设置初始偏移)。他们可以 而是使用我们的低级SimpleConsumer Api。逻辑会有点复杂 更复杂,您可以按照中的示例进行操作

此示例用于从具有以下参数的主题获取所有消息:(请注意,端口是Kafka端口,而不是ZooKeeper端口,主题设置自):

具体来说,有一种获取readOffset的方法,它接受kafka.api.OffsetRequest.EarliestTime()



下面是另一篇文章,可能会提供一些关于如何解决这个问题的其他想法:

基本上,每次新消费者尝试消费某个主题时,它都会从一开始就阅读消息。如果您每次都只是出于测试目的从一开始就消费,那么每次您使用新的groupID初始化您的消费者时,它都会从一开始就读取消息。我是这样做的:

properties.put("group.id", UUID.randomUUID().toString());

每次都要从头开始读信息

要从头开始提取消息,可以执行以下操作:

import kafka.utils.ZkUtils;
ZkUtils.maybeDeletePath("zkhost:zkport", "/consumers/group.id");
那就按照常规工作去做吧

 Properties props = new Properties(); 
 props.put("bootstrap.servers", "localhost:9092");
 props.put("auto.offset.reset", "earliest");
 props.put("group.id", UUID.randomUUID().toString());

此属性将帮助您。

您使用了什么来实现它?阅读主题中的所有信息。谢谢!出于测试目的需要它。我想这是因为您可以为不同的目的重用相同的数据?@user1758777是的,我需要每个不同的测试来处理相同的数据。
import kafka.utils.ZkUtils;
ZkUtils.maybeDeletePath("zkhost:zkport", "/consumers/group.id");
 Properties props = new Properties(); 
 props.put("bootstrap.servers", "localhost:9092");
 props.put("auto.offset.reset", "earliest");
 props.put("group.id", UUID.randomUUID().toString());