使用jcustenborder/kafka-connect-twitter对接Kafka Connect报错排查
核心问题解答
1. 原生Apache Kafka发行版是否自带Kafka Connect相关依赖?
原生Apache Kafka发行版仅自带Kafka Connect核心运行时组件,不包含Confluent社区维护的AvroConverter等额外扩展组件。AvroConverter属于Confluent Schema Registry相关生态组件,是Confluent平台发行版的内置内容,不在Apache官方Kafka的发布包中。
2. 错误原因与解决方法
第一个报错:找不到io.confluent.connect.avro.AvroConverter
你使用的connect-avro-docker.properties是Confluent平台适配的配置文件,原生Kafka环境下直接调用会缺失Avro相关依赖,解决方案:
- 将配置文件中的
key.converter和value.converter配置修改为原生Kafka自带的转换器,比如用JSON转换器:
key.converter=org.apache.kafka.connect.json.JsonConverter value.converter=org.apache.kafka.connect.json.JsonConverter key.converter.schemas.enable=false value.converter.schemas.enable=false
如果确实需要使用Avro序列化,需要手动下载Confluent的kafka-connect-avro-converter相关jar包,放到Kafka Connect的插件目录下。
第二个报错:java.lang.NoClassDefFoundError: com/google/common/collect/Multimap
这个问题是Kafka 2.8.0和JDK 17的兼容性问题,以及插件类加载隔离机制导致的:
- Kafka 2.8.0官方推荐的JDK版本为8或11,JDK 17对反射、模块化的限制会导致Kafka 2.8.0版本的类加载逻辑异常,哪怕日志显示加载了Guava包,实际运行时也会找不到类,建议降级JDK到11版本。
- 不要单独放置Guava包到插件目录,正确的插件放置方式是:把
kafka-connect-twitter组件编译后生成的target/kafka-connect-target/usr/share/kafka-connect/kafka-connect-twitter整个目录,拷贝到你Kafka配置的plugin.path指定的目录下,不要拆分里面的jar包。 - 检查
connect-standalone.properties里的plugin.path配置,确保指向了你存放连接器插件的父目录。
正确运行步骤参考
- 组件编译完成后,把完整的连接器目录拷贝到插件路径,比如你存放插件的目录是
/Users/paupaches/dev/kafka-connect/plugins,就把整个kafka-connect-twitter目录拷入该路径 - 修改
connect-standalone.properties的plugin.path为/Users/paupaches/dev/kafka-connect/plugins,同时修改转换器为上述JSON转换器 - 直接执行启动命令即可:
connect-standalone.sh connect-standalone.properties TwitterSourceConnector.properties,不需要手动配置CLASSPATH,Kafka Connect的插件加载机制会自动扫描路径下的jar包。
内容的提问来源于stack exchange,提问作者Pavitx
相关产品推荐
相关产品推荐

