Kafka Json序列化/反序列化报ClassNotFoundException问题求助
问题分析
你遇到的ClassNotFoundException核心原因有两个:
- 消费者配置层级错误:你把
spring.json相关配置直接放在Spring根节点下,而非spring.kafka.consumer.properties层级内,导致Kafka消费者的JsonDeserializer根本没加载到类型映射规则,只能按照消息头里的原始类名com.msb.config.json.ApiInsight去加载类,但消费者项目中不存在该类。 - 生产者与消费者的类型映射未正确联动:虽然两边都配置了别名
api,但消费者未正确读取到映射规则,无法将消息头中的标识转换为自己项目中的com.msb.entity.ApiInsight类。
修正方案
1. 修正消费者配置层级
将spring.json相关配置移至spring.kafka.consumer.properties下,确保JsonDeserializer能读取到配置:
spring: kafka: consumer: properties: spring.json.trusted.packages: com.* spring.json.type.mapping: api:com.msb.entity.ApiInsight
2. 优化生产者配置(可选)
生产者当前配置已正确,但可添加明确配置确保使用别名作为类型标识(部分版本默认行为需此配置):
spring.kafka.producer.properties.spring.json.type.mapping= api:com.msb.config.json.ApiInsight spring.kafka.producer.properties.spring.json.use.type.headers=true spring.kafka.producer.properties.spring.json.type.id.header=__TypeId__
3. 额外验证点
- 确保消费者侧的
com.msb.entity.ApiInsight与生产者侧的com.msb.config.json.ApiInsight类JSON结构完全兼容(字段名、类型一致),避免反序列化时出现其他错误。 - 用Kafka工具查看消息的
__TypeId__头,确认其值为api而非原始类名,若仍为原始类名,需检查Spring Kafka版本兼容性(你的2.9.13版本支持该配置)。
错误说明
报错信息里的ClassNotFoundException: com.msb.config.json.ApiInsight,本质是消费者未加载到类型映射规则,只能按消息头中的原始类名去查找,但消费者项目中没有这个包路径下的类,因此抛出异常。
内容的提问来源于stack exchange,提问作者divyanshusupehia2
相关产品推荐
相关产品推荐

