Kafka Connect Standalone报错:找不到ElasticsearchSinkConnector及plugin.path配置疑问
我之前在配置Kafka Connect同步MSK到Elasticsearch时也碰到过一模一样的报错,核心问题就是Kafka Connect没找到Elasticsearch连接器的依赖jar包,而plugin.path就是用来告诉Connect去哪里加载第三方连接器的关键配置,下面给你详细讲清楚怎么处理:
先搞懂plugin.path是什么
plugin.path不是Kafka Connect默认就配置好的有效路径——它默认是空或者仅指向Kafka自带的基础插件目录(比如FileStream这类),所以必须手动配置,指定存放第三方连接器jar包的目录,Connect启动时会扫描这个目录下的所有jar文件,识别可用的连接器。
具体解决步骤
1. 确认Elasticsearch连接器jar包的位置
你安装了Confluent 5.2.0,对应的Elasticsearch连接器jar包默认存放在Confluent安装目录的share/java/kafka-connect-elasticsearch/子目录下,先登录EC2实例验证这个目录是否存在:
ls /opt/confluent-5.2.0/share/java/kafka-connect-elasticsearch/
如果能看到一堆以kafka-connect-elasticsearch开头的jar文件,说明连接器已经安装好了,只是Connect没找到它。
2. 修改connect-standalone.properties配置
打开你的connect-standalone.properties文件,找到plugin.path配置项(如果没有就手动添加一行),把它指向Confluent的share/java/目录(因为Confluent的所有第三方连接器都在这个目录的子文件夹里,Connect会自动扫描子目录):
# 替换成你的Confluent实际安装路径 plugin.path=/opt/confluent-5.2.0/share/java/
3. 验证连接器是否能被识别
在正式启动Connect之前,先运行下面的命令检查是否能找到ElasticsearchSinkConnector:
# 进入你的Kafka安装目录 cd /path/to/kafka-2.2.1/ ./bin/connect-standalone.sh ./config/connect-standalone.properties ./config/quickstart-elasticsearch.properties --list
如果输出里能看到ElasticsearchSinkConnector,说明路径配置正确了。
4. 重新启动Kafka Connect
现在再执行你的启动命令,应该就不会再报ConnectException: Failed to find any class that implements Connector...的错误了。
额外注意事项
- 权限问题:如果是用root用户安装的Confluent,而你用普通用户启动Kafka Connect,可能会出现权限不足无法读取jar包的情况,执行下面的命令调整权限:
sudo chmod -R 755 /opt/confluent-5.2.0/share/java/ - 版本兼容性:你的Kafka 2.2.1和Confluent 5.2.0是完全兼容的(Confluent 5.2.x对应Kafka 2.2.x),不用担心版本不匹配的问题。
- 手动下载连接器的情况:如果不是通过Confluent安装的连接器,而是手动下载的jar包,只需要把所有相关jar放到一个目录(比如
/home/ec2-user/kafka-plugins/),然后把plugin.path指向这个目录即可。
内容的提问来源于stack exchange,提问作者Sudarshan kumar

