创建Kafka Connect源连接器时遇Moquette认证错误(4)
解决Moquette Broker "Bad user name or password (4)" 错误的实用方案
我之前在类似的版本组合(kafka-connect-cli 1.0.6、Moquette 0.10、JDK 1.8)下碰到过这个认证错误,给你整理几个针对性的排查和解决步骤:
1. 核对MQTT源连接器的认证配置
首先确认mqtt-source.properties里的用户名密码配置是否和Moquette Broker完全匹配,注意大小写敏感,别带多余空格:
# 确保这两个值和Moquette的配置完全一致 mqtt.username=your_mqtt_user mqtt.password=your_mqtt_pass
如果Moquette默认没开认证,记得把这两行注释掉或者删掉——Moquette 0.10默认是允许匿名连接的,强行填不存在的用户就会触发这个错误。
2. 检查Moquette Broker的认证规则
打开Moquette的config/moquette.conf配置文件,重点看这几项:
allow_anonymous:如果设为true,连接器不需要填用户名密码;如果是false,必须保证连接器的用户存在于Moquette的用户列表中;password_file:确认这个路径指向的文件存在,文件格式是每行username:password(Moquette 0.10默认用明文存储),检查你用的用户是否在这个文件里,密码有没有打错;- 如果你自定义了认证插件,要确认插件在JDK 1.8下能正常加载,避免用JDK 1.8不支持的加密算法。
3. 验证Kafka Connect的配置加载逻辑
有时候配置文件的格式问题会导致参数没被正确读取:
- 检查配置文件里的键值对是不是用
=正确分隔,有没有多余的引号; - 启动连接器时,确认命令里正确指定了配置文件,比如:
java -jar kafka-connect-cli-1.0.6-all.jar create mqtt-source-connector --config mqtt-source.properties
可以加上--debug参数查看详细日志,看看连接器实际发送的用户名密码是不是你配置的那个。
4. 版本兼容性小调整
JDK 1.8.0_161比较旧,可能存在一些加密相关的小Bug,建议升级到JDK 1.8的最新补丁版本(比如1.8.0_391)试试。另外,确认Moquette 0.10的MQTT 3.1.1认证逻辑和kafka-connect-cli 1.0.6的实现是否匹配,这两个版本理论上兼容,但偶尔会有小细节差异。
快速定位问题的临时方法
如果以上都排查完还是有问题,可以先把Moquette的allow_anonymous设为true,关闭认证,看看连接器能不能正常连接。如果能连上,就肯定是认证配置的问题;如果还是连不上,再去排查网络或者其他配置问题。
内容的提问来源于stack exchange,提问作者Mourish Khan
相关产品推荐
相关产品推荐

