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
Java 从kafka检索指定主题中每个分区的最后偏移量_Java_Apache Kafka - Fatal编程技术网

Java 从kafka检索指定主题中每个分区的最后偏移量

Java 从kafka检索指定主题中每个分区的最后偏移量,java,apache-kafka,Java,Apache Kafka,Kafka提供了有用的命令行工具Kafka.tools.GetOffsetShell,但我需要在我的应用程序中使用它的功能 我想获取指定主题中每个分区的所有偏移量,如下所示: bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list kafka:9092 --topic com.group.test.Foo com.group.test.Foo:0:10 com.group.test.Foo:1:11 com.group.te

Kafka提供了有用的命令行工具Kafka.tools.GetOffsetShell,但我需要在我的应用程序中使用它的功能

我想获取指定主题中每个分区的所有偏移量,如下所示:

bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list kafka:9092 --topic com.group.test.Foo
com.group.test.Foo:0:10
com.group.test.Foo:1:11
com.group.test.Foo:2:10
但我不想运行进程
bin/kafka-run-class.sh kafka.tools.GetOffsetShell

如何在Java中使用kafka api实现同样的功能?
我是否必须为每个
主题分区创建消费者并调用:
KafkaConsumer#position
?我需要更简单的方法?

默认情况下,
GetOffsetShell
返回每个分区的结束偏移量。您可以通过编程方式检索这些偏移量,如下所示:

......
try (final KafkaConsumer<String, String> consumer = new KafkaConsumer<>(consumerProperties)) {
    consumer.subscribe(Arrays.asList("topicName"));
        Set<TopicPartition> assignment;
        while ((assignment = consumer.assignment()).isEmpty()) {
            consumer.poll(Duration.ofMillis(100));
        }
        consumer.endOffsets(assignment).forEach((tp, offset) -> System.out.println(tp + ": " + offset));
}
。。。。。。
try(最终卡夫卡消费者=新卡夫卡消费者(消费者财产)){
consumer.subscribe(Arrays.asList(“topicName”);
设定作业;
while((assignment=consumer.assignment()).isEmpty()){
消费者调查(持续时间为百万(100));
}
consumer.endoffset(assignment.forEach((tp,offset)->System.out.println(tp+“:”+offset));
}

您可以使用Kafka提供的AdminClient类。我们在那里有一个方法describeTopics,它返回DescribeTopicsResult。你可以在那里找到很多细节。它不会被抵消。遗憾的是,我也找不到一个简单的选择。您可能需要直接将ConsumerNetworkClient与ListOffsetRequest一起使用。