如何使用Spring Kafka列出订阅/注册的消费者?

时间:2019-11-01 17:40:19

标签: spring-kafka

我是spring-kafka版本2.2.7-RELEASE,用于编写kafka侦听器(作为消费者),并尝试了解我们在spring-kafka中是否可以选择直接列出所有已订阅/注册的消费者,并提供以下详细信息:消费者群体,消费者滞后补偿等?

1 个答案:

答案 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()创建一个管理员,创建一个使用者,然后执行相同的操作。

相关问题