Java接口访问ZooKeeper连接失败解决方案及启动详解
创始人
2024-12-25 09:52:17
0 次浏览
0 评论
如何解决java接口访问ZooKeeper时的connectionloss错误
常见错误日志如下:org.apache.zookeeper.KeeperException$ConnectionLossException:KeeperErrorCode=ConnectionLoss1原因:ZooKeeper在建立连接时使用常量操作。连接处理后不保证ZK连接成功。
如果在ZK连接失败之前的这个小时间窗口内访问ZK。
你会遇到上面的错误。
2、解决办法:创建新的ZK连接后必须等待一段时间,确保连接成功后才能访问ZK。
3、网上最认同的方案:主要使用两个Java类:(1)java.util.concurrent.CountDownLatch:类似Countdown的同步类,直到资源到达计数器时才能“解锁”。
我买了0。
您只能阻止在解锁资源之前等待的进程。
主要方法:publicCountDownLatch(intcount);/*构造函数;参数指定计数次数*/publicvoidcountDown();/*当当前线程调用该函数时;count将会减一*/publicvoidawait()throwsInterruptedException;/*该函数返回一个定时器值0*/(2)org.apache.zookeeper.WatcherZooKeeper有一个非常有用的函数;这意味着集群中的每一个变化都可以通知给Watchcer。
定义。

如何启动多个zookeeper
Zookeeper启动入口位于类org.apache.zookeeper.server.quorum.QuorumPeerMain的main方法中。首先,程序会解析Zoo.cfg和myid配置文件来定位dataDir和dataLogDir日志目录。
之后,如果配置中指定了相关参数,程序将开始清理注册表的任务。
日志清理任务由DatadirCleanupManager类创建并启动,其构造函数接收数据目录、日志目录、快照保留数和清理间隔作为参数。
然后,ServerCnxnFactory用于接收客户端连接初始化。
Zookeeper提供了两种实现方式,一种是基于Java原生NIO的NIOServerCnxnFactory,另一种是使用Netty的NettyServerCnxnFactory。
Zookeeper默认使用JavaNIO方式,采用Reactor编程模型。
ServerCnxnFactory实例创建后,会配置客户端端口地址和最大客户端连接数。
接下来,Zookeeper将创建多个SelectorThread来处理数据的读写。
首先创建一个ServerSocketChannel并将其绑定到指定地址,然后将ServerSocketChannel设置为非阻塞模式。
因此,创建一个AcceptThread线程来处理客户端的连接请求。
进入配置的主要部分时,首先创建一个QuorumPeer实例来代表Zookeeper集群中的一个节点。
初始化过程包括以下基本步骤:初始化FileTxnSnapLog,管理事务日志和快照;初始化ZKDatabase,它是Zookeeper目录结构的内存表示;并初始化QuorumVerifier,用于标识投票节点和观察者参与的节点。
此步骤还涉及为每个节点初始化一个QuorumServer对象并将其存储在相应的成员列表中。
最后一步是进行领导者选举,这是Zookeeper启动过程中最复杂也是最重要的部分。
完成这一步后,Zookeeper就会运行。
接下来我们将进一步探讨Zookeeper的leader选举机制、数据存储以及如何处理客户端请求。
相关文章

Java程序员必备:11大编程学习与刷题...
2024-12-17 19:02:47
Java JSON转换技巧:解决对端系统...
2024-12-26 07:39:43
Java免费工具盘点:从Java18到开...
2025-01-13 01:44:43
JavaScript详解:内置函数分类与...
2024-12-16 19:58:11
Java反射调用与JAR包运行教程:新手...
2024-12-17 10:37:16
Java中new关键字详解及内存管理技巧
2024-12-21 07:46:28
C语言教程:字符串中数字、大小写字母及其...
2024-12-17 04:58:57
Java学习攻略:基础到进阶必备知识汇总
2024-12-15 10:27:15
Java自学指南:从零开始,高效掌握Ja...
2024-12-15 03:49:49
Java编程必备:实用软件工具与平台推荐...
2024-12-21 04:23:32最新文章
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
热门文章
1
Java字符串分割技巧:轻松获取逗号前的...
java任意一个字符串,当它碰到第一个逗号时,返回逗号前面的字符串,例如:str...
2
SQL多表连接查询全解析:JOIN语句应...
sql多表关联查询在执行SQL多表连接查询时,可以使用JOIN语句将多个表连接在...
3
Java中字符串类型详解:String与...
变量有字符类型,为什么没有字符串类型??基本类型:charshort、int、l...
4
JavaSE与JavaEE:从基础到企业...
javase 和javaee的区别?JavaSE和JavaEE...
5
Java程序员面试必知:核心技术问答与技...
java编程程序员技术面试常见面试?随着互联网的不断发展,Java开发已经成为很...
6
Java.exe与Javaw.exe:区...
程序中java和javaw有什么区别java和javaw的区别:两者都是Java...
7
深入解析:Java中的javax包及其与...
JAVA导入时,什么是javax?awt是java1.0,swing是java2...
8
Java基础教程:深入理解File和Pa...
java中if(!file.exists())什么意思?”“在Java >...
9
Java字符串搜索与位置定位技巧解析
在java中求一个字符串在另一个字符串中多次出现的位置。用indexOf方法怎么...
10
Java静态资源加载机制解析:静态方法与...
java静态资源(静态方法,静态属性)是程序一运行就加载到jvm中,还是当被调用...