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选举机制、数据存储以及如何处理客户端请求。
热门文章
1
SQL多表连接查询全解析:JOIN语句应... sql多表关联查询在执行SQL多表连接查询时,可以使用JOIN语句将多个表连接在...

2
Java中字符串类型详解:String与... 变量有字符类型,为什么没有字符串类型??基本类型:charshort、int、l...

3
JavaSE与JavaEE:从基础到企业... javase 和javaee的区别?JavaSE和JavaEE...

4
Java程序员面试必知:核心技术问答与技... java编程程序员技术面试常见面试?随着互联网的不断发展,Java开发已经成为很...

5
Java.exe与Javaw.exe:区... 程序中java和javaw有什么区别java和javaw的区别:两者都是Java...

6
深入解析:Java中的javax包及其与... JAVA导入时,什么是javax?awt是java1.0,swing是java2...

7
Excel高效指南:字符转数值的实用技巧 excel怎么将字符串转为数值1.您可以使用“VALUE”函数将字符串转换为数值...

8
Python编程错误解析与解决指南 Python错误大全本文记录了学习Python过程中遇到的一些警告错误以及纠正方...

9
Java高清视频处理技术解析:JAVAH... JAVAHDVIDEO:解析Java技术在高清视频处理中的创新应用!JAVAHD...

10
Java编程:深入解析抽象类与接口的五大... 抽象类和接口的区别在哪里?1其他方法接口方法默认是公共的,并非所有方法都可以在接...