获取kafka中topic偏移量和消费偏移量

本文介绍了使用KafkaClient1.0.1版本的KafkaConsumer进行多线程任务测试,强调了groupId在获取消费偏移量时的重要性,不同groupId可能导致committed.offset()为null。
摘要由CSDN通过智能技术生成

 1、kafkaclient版本1.0.1

public class MutiThreadScheduleTask {

@Resource
private KafkaConsumer<String, String> kafkaConsumer;

public void test(String topic) {
        
            //查询 topic partitions
            List<TopicPartition> topicPartitionList = new ArrayList<>();

            List<PartitionInfo> partitionInfoList = kafkaConsumer.partitionsFor(topic);
            for (PartitionInfo partitionInfo : partitionInfoList) {
                TopicPartition topicPartition = new TopicPartition(partitionInfo.topic(), partitionInfo.partition());
                topicPartitionList.add(topicPartition);
            }

            //查询总偏移量
            Map<Integer, Long> endOffsetMap = new HashMap<>();
            Map<TopicPartition, Long> endOffsets = kafkaConsumer.endOffsets(topicPartitionList);
            for (TopicPartition partitionInfo : endOffsets.keySet()) {
                endOffsetMap.put(partitionInfo.partition(), endOffsets.get(partitionInfo));
            }

            //查询消费消费偏移量
            Map<Integer, Long> commitOffsetMap = new HashMap<>();
            for (TopicPartition topicAndPartition : topicPartitionList) {
                OffsetAndMetadata committed = kafkaConsumer.committed(topicAndPartition);
                commitOffsetMap.put(topicAndPartition.partition(), committed.offset());
            }
            
    }
}

2、这部分测试代码和真正的消费端不在一个程序内,连接kafka时随便配置了一个groupId,然后kafkaConsumer.committed(topicAndPartition)一直为null。后来groupId改成和消费者一致时能成功查到。如果测试代码有个消费程序在消费其他topic,则上面代码中的KafkaConsumer要单独生成一个对象,单独指定这个groupId。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如果您想获取Kafka Topic偏移量,而不想订阅它,可以使用Kafka的AdminClient API。以下是获取Kafka Topic偏移量的示例代码: ```java import org.apache.kafka.clients.admin.AdminClient; import org.apache.kafka.clients.admin.AdminClientConfig; import org.apache.kafka.clients.admin.ListConsumerGroupOffsetsResult; import org.apache.kafka.clients.admin.ListConsumerGroupsResult; import org.apache.kafka.clients.admin.ListConsumerGroupOffsetsOptions; import org.apache.kafka.clients.admin.ListConsumerGroupsOptions; import org.apache.kafka.clients.admin.ListOffsetsResult; import org.apache.kafka.clients.admin.OffsetSpec; import org.apache.kafka.clients.admin.TopicDescription; import org.apache.kafka.clients.admin.TopicListing; import org.apache.kafka.common.TopicPartition; import org.apache.kafka.common.serialization.StringDeserializer; import java.util.Collections; import java.util.Properties; import java.util.Set; import java.util.concurrent.ExecutionException; public class KafkaTopicOffsetExample { private static final String BOOTSTRAP_SERVERS = "localhost:9092"; private static final String GROUP_ID = "my-group"; private static final String TOPIC_NAME = "my-topic"; public static void main(String[] args) throws ExecutionException, InterruptedException { // 创建AdminClient实例 Properties props = new Properties(); props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS); AdminClient adminClient = AdminClient.create(props); // 获取Topic Description Set<String> topicNames = Collections.singleton(TOPIC_NAME); var topicDesc = adminClient.describeTopics(topicNames).all().get().get(TOPIC_NAME); // 获取Topic Partitions var partitions = topicDesc.partitions(); // 获取偏移量 ListOffsetsResult listOffsetsResult = adminClient.listOffsets(Collections.singletonMap(new TopicPartition(TOPIC_NAME, 0), OffsetSpec.latest())); long offset = listOffsetsResult.values().get(new TopicPartition(TOPIC_NAME, 0)).get().offset(); System.out.println("Offset: " + offset); // 关闭AdminClient adminClient.close(); } } ``` 在这个例子,我们使用Kafka的AdminClient类获取Kafka Topic偏移量。首先,我们创建AdminClient实例并获取Topic Description和Partitions。然后,我们使用listOffsets()方法获取Topic的最新偏移量。最后,我们打印偏移量并关闭AdminClient。注意,我们在这个例子获取了一个分区的偏移量,如果您想获取所有分区的偏移量,需要在listOffsets()方法传递一个TopicPartition列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小一猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值