使用Confluent Avro的Kafka Connect找不到SchemaRegistryClient类问题
Kafka Connect Avro转换器实例化错误排查
环境信息
- JDK版本:17
- Apache Kafka版本:3.5.1
- Kafka Connect模式:分布式
- 使用插件:Confluent Avro转换器
连接器配置
{ "connector.class": "...", "tasks.max": "3", "name": "test-connector", "value.converter": "io.confluent.connect.avro.AvroConverter", "value.converter.schema.registry.url": "http://localhost:8081", "errors.log.include.messages": "true", "errors.log.enable": "true" }
报错日志
org.apache.kafka.connect.errors.ConnectException: Instantiation error at org.apache.kafka.connect.runtime.isolation.Plugins.newPlugin(Plugins.java:85) at org.apache.kafka.connect.runtime.isolation.Plugins.newConverter(Plugins.java:327) at org.apache.kafka.connect.runtime.Worker.startTask(Worker.java:622) at org.apache.kafka.connect.runtime.Worker.startSourceTask(Worker.java:548) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.startTask(DistributedHerder.java:1833) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.lambda$getTaskStartingCallable$32(DistributedHerder.java:1850) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: java.lang.NoClassDefFoundError: io/confluent/kafka/schemaregistry/client/SchemaRegistryClient at java.base/java.lang.Class.getDeclaredConstructors0(Native Method) at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3373) at java.base/java.lang.Class.getConstructor0(Class.java:3578) at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2754) at org.apache.kafka.common.utils.Utils.newInstance(Utils.java:396) at org.apache.kafka.connect.runtime.isolation.Plugins.newPlugin(Plugins.java:83) ... 9 more Caused by: java.lang.ClassNotFoundException: io.confluent.kafka.schemaregistry.client.SchemaRegistryClient at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592) at org.apache.kafka.connect.runtime.isolation.PluginClassLoader.loadClass(PluginClassLoader.java:136) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ... 15 more
可能的问题点
- 依赖jar包不完整:仅存在
kafka-schema-registry-client-7.5.0.jar不足以支撑AvroConverter运行,还需要schema-registry-common、kafka-schema-registry-client-api等关联依赖包。需确认是否完整解压了Confluent插件的zip包,而非仅单独放置单个jar。 - 插件目录结构不符合规范:Kafka Connect要求每个插件独立存放在单独的子目录下(如
plugins/confluent-avro-converter/下存放该插件的所有jar)。若所有插件jar直接堆在plugins根目录,会触发类加载隔离机制,导致依赖类无法被找到。 - 版本兼容性冲突:虽然Confluent 7.5.x理论上兼容Apache Kafka 3.5.x,但需确认插件jar是否适配JDK17。部分旧版本依赖可能未针对JDK17的模块化或字节码版本做适配,导致类加载失败。
- 类加载器隔离问题:检查
plugin.path配置是否指向包含完整插件子目录的路径,而非单个jar文件。同时排查Connect的libs目录是否存在重复的schema registry客户端jar,引发类加载冲突。 - 文件权限不足:确认Connect运行用户对插件目录及jar包有读取权限,若权限缺失,ClassLoader无法加载jar内的类文件。
内容的提问来源于stack exchange,提问作者hrs
相关产品推荐
相关产品推荐

