我是spring-kafka版本2.2.7-RELEASE,用于编写kafka侦听器(作为消费者),并尝试了解我们在spring-kafka中是否可以选择直接列出所有已订阅/注册的消费者,并提供以下详细信息:消费者群体,消费者滞后补偿等?
答案 0 :(得分:0)
当前的2.2.x版本是2.2.10。
如果您使用的是Spring Boot:
@Bean
public ApplicationRunner runner(KafkaAdmin admin, ConsumerFactory<String, String> cf) {
return args -> {
Consumer<String, String> consumer = cf.createConsumer("group", "clientId", "");
try (AdminClient client = AdminClient.create(admin.getConfig())) {
Collection<ConsumerGroupListing> groups = client.listConsumerGroups()
.all()
.get(10, TimeUnit.SECONDS);
groups.forEach(group -> {
Map<TopicPartition, OffsetAndMetadata> map = null;
try {
map = client.listConsumerGroupOffsets(group.groupId())
.partitionsToOffsetAndMetadata()
.get(10, TimeUnit.SECONDS);
}
catch (InterruptedException e) {
e.printStackTrace();
}
catch (ExecutionException e) {
e.printStackTrace();
}
catch (TimeoutException e) {
e.printStackTrace();
}
Map<TopicPartition, Long> endOffsets = consumer.endOffsets(map.keySet());
map.forEach((tp, off) -> {
System.out.println("group: " + group + " tp: " + tp
+ " current offset: " + off.offset()
+ " end offset: " + endOffsets.get(tp));
});
});
}
finally {
consumer.close();
}
};
}
如果您不使用Spring Boot,请使用AdminClient.create()
创建一个管理员,创建一个使用者,然后执行相同的操作。