如何查看微服务生产与消费的Kafka主题及相关信息?
一、通用Kafka工具查询微服务关联的主题
Kafka本身没有直接绑定微服务和主题的内置功能(毕竟这是业务层面的映射),但可以通过以下方式间接获取:
1. 列出集群所有主题
用Kafka自带的kafka-topics.sh脚本(Windows环境用.bat后缀):
kafka-topics.sh --list --bootstrap-server <你的Kafka broker地址:端口>
2. 已知消费者组时,查看其订阅的主题
如果知道微服务对应的消费者组名称,用kafka-consumer-groups.sh查询细节:
kafka-consumer-groups.sh --describe --group <目标消费者组名> --bootstrap-server <你的Kafka broker地址:端口>
这个命令会输出该消费者组订阅的所有主题、分区消费位移等信息。
3. 结合微服务日志定位生产主题
微服务生产消息时,通常会在日志里打印目标主题名称(比如Spring Boot应用会有类似Sending message to topic xxx的日志),直接检索日志就能找到生产的主题。
二、Spring Boot Kafka微服务专属查询方法
针对Spring Boot Kafka应用,有更直接的方式获取自身的输入输出主题和消费者组:
1. 查看应用配置文件
直接打开application.properties或application.yml,定位Kafka相关配置:
比如application.yml中的配置片段:
spring: kafka: consumer: group-id: order-service-consumer-group # 消费者组ID listener: topics: order-create-topic # 输入主题 template: default-topic: order-notify-topic # 默认输出主题
2. 用Spring Actuator暴露配置
如果应用集成了Spring Actuator,启动后访问/actuator/env端点,就能查看所有配置属性,包括spring.kafka.consumer.group-id、spring.kafka.listener.topics等关键信息。
3. 自定义接口暴露信息
可以写个简单的Controller,把Kafka配置直接返回:
@RestController @RequestMapping("/kafka-config") public class KafkaConfigController { @Value("${spring.kafka.consumer.group-id:未配置}") private String consumerGroup; @Value("${spring.kafka.listener.topics:未配置}") private String inputTopics; @Value("${spring.kafka.template.default-topic:未配置}") private String outputTopic; @GetMapping public Map<String, String> getKafkaConfig() { Map<String, String> config = new HashMap<>(); config.put("消费者组ID", consumerGroup); config.put("输入主题", inputTopics); config.put("输出主题", outputTopic); return config; } }
启动后访问/kafka-config就能拿到清晰的配置信息。
4. 通过JMX查看
Spring Boot Kafka会暴露JMX MBean,用JConsole或VisualVM连接应用进程,找到org.springframework.kafka域下的MBean,就能看到消费者组、订阅主题等实时信息。
内容的提问来源于stack exchange,提问作者blake_griffin

