1.概述

最近在服务中添加链路追踪功能时,遇到了一个了一个kafka报错的问题,经过一番排查,最终确认了问题根源,予以解决。下面将阐述这一问题的排查过程。

2.问题排查

错误信息如下图所示:

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2020-10-20 17:00:52.090 |-ERROR [main] org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter [42] -| 

***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 2 of method reporter in org.springframework.cloud.sleuth.zipkin2.ZipkinAutoConfiguration required a bean of type 'zipkin2.reporter.Sender' that could not be found.
	- Bean method 'kafkaSender' not loaded because @ConditionalOnClass did not find required class 'org.apache.kafka.common.serialization.ByteArraySerializer'
	- Bean method 'rabbitSender' not loaded because ZipkinSender org.springframework.cloud.sleuth.zipkin2.sender.ZipkinRabbitSenderConfiguration kafka sender type
	- Bean method 'restTemplateSender' not loaded because ZipkinSender org.springframework.cloud.sleuth.zipkin2.sender.ZipkinRestTemplateSenderConfiguration kafka sender type
Action:
Consider revisiting the conditions above or defining a bean of type 'zipkin2.reporter.Sender' in your configuration.

从报错信息上来看,是因为在ZipkinAutoConfiguration 配置类启动时,需要配置zipkin2.reporter.Sender的参数,该参数只可传指定的三种类型rest、kafka、rabbitMQ,分别表示采集的链路请求信息以rest形式、kafka形式和rabbitMQ形式向服务器发送。于是便仔细查看了配置文件application.properties,关于zipkin部分的配置如下:

#zipkin配置  
spring.zipkin.sender.type=kafka  	  
# 采样率,模式0.1,也就是10%,为了便于观察效果,改为1.0,也就是100%。生产环境建议保持默认。  
spring.sleuth.sampler.percentage=1  
#使得调度任务切面无效,跳过定时任务的span生成  
spring.sleuth.scheduled.enabled=false  
#跳过consul健康检查的请求捕获  
spring.sleuth.web.skip-pattern=/health  
    
# ====kafka配置====  
spring.kafka.bootstrap-servers=localhost:9092
spring.zipkin.kafka.topic=zipkin.data

很明显已经配置了zipkin的链路消息以kafka形式向外发送,且配置了kafka的地址和主题,说明配置文件应该没问题。那么问题很可能出现在Kafka的版本上,于是赶紧查看了一下pom.xml配置文件,果然有两个kafka版本,便将pom文件中关于链路追踪的配置改成如下:

<dependency>  
	<groupId>org.springframework.cloud</groupId>  
	<artifactId>spring-cloud-starter-zipkin</artifactId>  
</dependency> 
	<!-- kafka -->  
<dependency>  
	<groupId>org.springframework.kafka</groupId>  
	<artifactId>spring-kafka</artifactId>  
</dependency> 

重新启动项目,正常运行。

3.小结

1.配置报错的信息,主要是由于Kafka版本问题,spring-kafka中集成了关于kafka相关的所有pom文件;
2.zipkin的版本与kafka的版本要对应。

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐