zookeeper KeeperErrorCode = ConnectionLoss for / 相关问题

在确保IP和配置正确的情况下,遇到Zookeeper连接bug。解决方法包括:1) 使用while循环检查连接状态,直到建立连接再执行操作;2) 调整zoo.cfg配置文件的tickTime、initLimit和syncLimit参数,以及Java连接代码中的sessionTimeout。对于Curator框架,也可增加connectionTimeoutMs和sessionTimeoutMs来避免连接问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里假设ip jar对应的版本 都匹配得上zookeeper服务器,防火墙也开了的情况下
然后,在运行中我执行下代码,发现有下述bug
在这里插入图片描述
这个可能是在未连接到zookeeper的情况下来执行的

第一种方法

于是加个判断

while(true){
	if (ZooKeeper.States.CONNECTING == zkClient.getState()) {
	    Thread.sleep(1000);
	}else {
	    break;
	}
}

等建立连接后再执行对zookeeper服务器的各种操作,解决~

第二种方法

可以设置下zoo.cfg 配置文件,里面有个时间可以设置下

# 通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
tickTime=2000
# 初始通信时限 LeaderFollower初始连接时能容忍的最多心跳数(tickTime的数量)
initLimit=10
# LF同步通信时限 LeaderFollower之间通信时间如果超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer
syncLimit=5

同样,也可以在java连接代码中增大sessionTimeout

ZooKeeper zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {

            }
        });

在Curator框架也一样

CuratorFramework client = CuratorFrameworkFactory.builder()
                .connectString("114.132.233.176:2181,114.132.233.176:2182,114.132.233.176:2183")
                .connectionTimeoutMs(21000)
                .sessionTimeoutMs(21000)
                .retryPolicy(policy).build();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值