使用MQTT协议创建Kafka主题时Zookeeper报Len error错误求助
排查MQTT创建Kafka主题时ZooKeeper Len Error的思路
我来帮你梳理下这个问题的排查方向——这个Len error明显是ZooKeeper在处理请求时收到了不符合它协议规范的数据包,结合你手动操作Kafka正常、但MQTT操作出问题的场景,重点可以从这几个角度入手:
先确认请求发对了地方
错误日志显示客户端/192.18.0.1:15659连到了ZooKeeper的2181端口,但MQTT请求应该发往Kafka的MQTT服务端口(通常是1883,或者你自定义的端口),而非ZooKeeper。先检查测试设备的MQTT连接配置:是不是把Broker地址写错成了ZooKeeper节点的IP和2181端口?很多时候都是这个低级错误导致的。检查MQTT-Kafka桥接/代理的配置
如果你是通过MQTT代理(比如EMQX)或者Kafka Connect的MQTT连接器实现MQTT转Kafka,先确认这些中间件的配置:- 有没有正确指向Kafka Broker的地址,而非ZooKeeper?
- 主题映射规则是否正确?比如是否把MQTT主题转换成了合法的Kafka主题名称,有没有触发异常的请求逻辑?
- 这些中间件本身是否正常运行?查看它们的日志,有没有连接Kafka失败或者处理请求出错的信息。
验证ZooKeeper收到的异常数据包来源
那个271056900的长度值明显不符合ZooKeeper协议的请求长度范围,说明ZooKeeper收到的是MQTT协议的数据包。你可以用tcpdump在ZooKeeper节点上抓包,确认这个请求的内容是不是MQTT报文。如果是的话,那肯定是请求路由错了,回到前两步找配置问题。检查Kafka的MQTT服务是否正常
如果你用的是Kafka自带的MQTT支持(比如Confluent MQTT Proxy),先确认这个服务已经正确安装并启动:- 查看Kafka或MQTT Proxy的日志,有没有启动失败的报错?
- 确认Kafka的MQTT监听端口已经正常开放,测试设备能正常访问这个端口(可以用
telnet或者nc工具测试连通性)。
内容的提问来源于stack exchange,提问作者mjaneva
相关产品推荐
相关产品推荐

