自定义Kafka连接器未被识别求助(无网络无法使用Maven)
自定义Kafka连接器加载问题排查方案
一、必须遵循的插件文件夹结构
Kafka Connect对插件目录结构有硬性要求,哪怕PluginClassLoader检测到路径,结构不对也不会加载连接器:
- 每个自定义连接器必须单独放在一个子目录里,示例结构:
# 假设你的plugin.path配置为/opt/kafka-connectors /opt/kafka-connectors/ ├── my-custom-source-connector/ │ ├── my-connector-core.jar │ └── commons-lang3-3.12.0.jar # 连接器依赖的第三方jar └── another-connector/ └── another-connector.jar - 禁止把多个连接器的jar直接堆在
plugin.path根目录下,必须一个连接器对应一个子文件夹 - 所有依赖jar要和连接器主jar放在同一个子目录,保证ClassLoader能加载到完整依赖
二、离线打包Jar的核心要求(无需Maven网络)
没法用Maven在线构建的话,打包时必须满足以下两点,否则连接器不会被识别:
- 声明连接器类路径
在jar包的META-INF/services目录下,创建名为org.apache.kafka.connect.connector.Connector的文件,文件里只写你自定义连接器类的完整包名+类名,比如:
要是你的连接器是Source类型,同样要创建com.company.MyCustomSinkConnectororg.apache.kafka.connect.source.SourceConnector文件,写入对应类路径(Sink则是org.apache.kafka.connect.sink.SinkConnector) - 依赖处理
- 如果你用
jar命令手动打包,把依赖类和连接器类一起打进jar,或者把依赖jar和主jar放在同一个插件子目录 - 手动打包命令示例:
其中jar cvfm my-connector.jar manifest.txt com/ lib/manifest.txt可指定主类(非必须,但规范):Main-Class: com.company.MyCustomSinkConnector
- 如果你用
- 权限检查
确保Kafka Connect进程能读取插件目录和jar文件,执行:chmod -R 755 /opt/kafka-connectors/my-custom-source-connector
三、额外排查要点
- 仔细看Connect日志,有没有类加载失败的报错(比如找不到依赖类、JDK版本不兼容),这类错误会导致连接器不被加入列表
- 确认自定义连接器类正确继承了
SourceConnector或SinkConnector父类 - 改完配置或调整文件结构后,必须重启Kafka Connect服务才能生效
内容的提问来源于stack exchange,提问作者suraj shinde
相关产品推荐
相关产品推荐

