首先报错信息如下

Opening socket connection to server XXX/XXX:2181. Will not attempt to authenticate using SASL (unknown error)
WARN [org.apache.zookeeper.ClientCnxn] - Client session timed out, have not heard from server in 9329ms for sessionid 0x0
INFO [org.apache.zookeeper.ClientCnxn] - Client session timed out, have not heard from server in 9329ms for sessionid 0x0, closing socket connection and attempting reconnect

可能出现这种情况的原因

1、如果是阿里云,看下端口是不是没有开放。
2、看下防火墙有没有开放端口,不建议直接关闭防火墙,生产环境哪有让你关防火墙的操作。
3、服务器上布置的代码版本和IDEA导入的版本是否一致。
4、你的服务器上的zookeeper是不是正常启动了,没有报错。

1、如果以上原因都排除了,那看下你用的版本是不是3.4.5及之前的版本。
如果是那原因可能是Will not attempt to authenticate using SASL (unknown error),这个错误导致的一直连接不上。
2、出现原因:zookeeper是一个外部应用,当它放到tomcat、jBoss、netty等容器里边,当有zk client 调用zk server 的时候需要通过容器向系统申请资源,就会默认要使用sasl。如果没有在这套安全模式里面给zookeeper做配置,在调用的时候就会抛出上述错误。
3、解决思路:通过出现的原因,有两种解决思路:一种是给zookeeper做安全配置,一种就是让zookeeper绕过sasl安全机制,直接向系统获取资源。
通过这两个思路进行搜索,发现第一种比较复杂。
4、在针对第二种思路进行搜索,在apache bug管理官网发现有相应的描述:https://issues.apache.org/jira/browse/ZOOKEEPER-1657,通过官网发现,在zookeeper 3.4.5之前,sasl认证是没有办法规避的,在3.4.6版本后修复了这个bug,因为不停的去检测认证虽然对功能没有什么影响,但是比较耗费服务器性能,比较占用容器资源。
5、在创建zk连接之前可以通过设置系统参数(zookeeper.client.sasl)为false来禁用sasl认证。或者System.setProperty(“zookeeper.sasl.client”, “false”);

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐