Spring Cloud Edgware.SR2迁移Kafka后无Zipkin链路追踪问题求助
我之前在Spring Cloud Edgware版本做类似的RabbitMQ转Kafka迁移时,也碰到过完全一样的问题,给你整理几个最可能的排查方向:
1. 确认依赖配置是否正确
Edgware版本的Zipkin和Sleuth对Kafka的依赖配置有特定要求,你需要确保已经排除了RabbitMQ相关的自动配置,同时引入了正确的Kafka绑定依赖:
<!-- 核心Zipkin依赖,排除RabbitMQ绑定 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </exclusion> </exclusions> </dependency> <!-- Sleuth-Zipkin的Stream依赖,同样排除RabbitMQ --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </exclusion> </exclusions> </dependency> <!-- Kafka Stream绑定依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-kafka</artifactId> </dependency>
2. 检查配置文件的关键参数
确保你的application.properties(或yml)里已经正确配置了Kafka相关参数,并且禁用了RabbitMQ的自动配置:
# 排除RabbitMQ的自动配置类,避免冲突 spring.autoconfigure.exclude=org.springframework.cloud.stream.binder.rabbit.RabbitServiceAutoConfiguration # 指定Zipkin使用Kafka作为数据传输方式 spring.zipkin.sender.type=kafka # Kafka的bootstrap地址,和你的集群地址一致 spring.kafka.bootstrap-servers=localhost:9092 # 可选:确认Zipkin使用的主题名称,默认就是zipkin,要和你消费的主题匹配 spring.zipkin.kafka.topic=zipkin
3. 调整Sleuth采样率
默认情况下Sleuth的采样率是10%(spring.sleuth.sampler.probability=0.1),有可能你测试的请求刚好没被采样到。可以临时把采样率调到100%来验证:
spring.sleuth.sampler.probability=1.0
4. 确认Kafka主题是否存在
Edgware版本的Spring Cloud可能不会自动创建Zipkin主题,你可以手动创建主题后再测试:
kafka-topics.sh --create --topic zipkin --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
5. 检查Zipkin Server的配置
如果你是独立部署的Zipkin Server,需要确保它已经配置了从Kafka消费数据。启动Zipkin Server时可以指定参数:
java -jar zipkin-server.jar --STORAGE_TYPE=mem --KAFKA_BOOTSTRAP_SERVERS=localhost:9092
或者在Zipkin的配置文件中设置对应的Kafka消费者参数,确保它监听的是zipkin主题。
6. 查看生产者服务的日志
把服务的日志级别调到debug,重点查看org.springframework.kafka和org.springframework.cloud.sleuth相关的日志,看看有没有发送Kafka消息的记录,或者是否有连接失败、发送异常的报错信息。
最后别忘了,一定要调用生产者服务的实际接口,只有当有请求进入时,Sleuth才会生成追踪数据并发送到Kafka。调用几次接口后,再用你的消费者命令查看主题数据,或者刷新Zipkin UI。
内容的提问来源于stack exchange,提问作者Keith Bennett

