Kamon监控Kafka Streams应用时抛出ClassNotFoundException问题排查
问题排查与解决方案
1. 检查Kanela Agent的类加载路径
Kanela Attach Listener使用独立类加载器,无法直接访问应用类路径内的依赖。需确保kamon-kafka的jar包能被Agent加载到:
- 命令行启动时,将
kamon-kafka依赖加入Agent的类路径参数; - 使用
sbt run时,通过sbt dependencyTree确认运行类路径已包含kamon-kafka的完整jar包。
2. 确认依赖范围正确
检查sbt.build中kamon-kafka的依赖范围是否为默认的compile(若误设为test或provided,会导致运行时类缺失):
libraryDependencies += "io.kamon" %% "kamon-kafka" % "2.5.4"
修正范围后执行sbt clean compile重新构建。
3. 移除自定义的Kanela模块配置
kamon-kafka依赖自带预定义的Kafka客户端instrumentation模块,你自定义的kafka-client-module可能干扰默认配置。删除整个kanela.modules.kafka-client-module配置块,重启应用后Kanela会自动加载默认的Kafka instrumentation类。
4. 排查打包/运行时的类丢失问题
- 若使用
sbt-assembly打包,检查assembly配置是否排除了kamon-kafka的类,或shading规则是否导致类路径变更; - 先通过
sbt run直接启动应用,排除打包过程中的类丢失问题。
5. 验证版本兼容性
确认kamon-kafka 2.5.4与Scala 2.13的兼容性:Kamon 2.x系列全面支持Scala 2.13,但如果你的Kafka Streams版本与kamon-kafka依赖的Kafka客户端版本差异过大,可能间接引发类加载异常。可通过sbt dependencyTree查看kamon-kafka依赖的Kafka客户端版本,确保与应用使用版本一致或兼容。
内容的提问来源于stack exchange,提问作者omer
相关产品推荐
相关产品推荐

