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开发工程师必学基础知识与技能清单
2024-12-24 05:43:59Python入门:max()函数及if语...
2024-12-17 08:12:41N81游戏兼容难题解答:Symbian时...
2024-12-18 16:31:11Java开发必备:javac与java命...
2024-12-14 18:41:29C语言字符数组与字符串差异解析
2024-12-16 10:25:35Java培训时长揭秘:前锋教育学员真实分...
2024-12-15 11:15:16Java单例模式实现方法及对比分析
2024-12-26 06:31:20Java正则表达式中点符号的用法解析及字...
2024-12-24 16:32:37Python除法运算符区别://、/与%...
2024-12-17 15:13:40Java与C语言:就业与学习优势对比解析
2024-12-17 02:52:20最新文章
25
2024-12
25
2024-12
25
2024-12
25
2024-12
25
2024-12
25
2024-12
25
2024-12
25
2024-12
25
2024-12
25
2024-12
热门文章
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其他方法接口方法默认是公共的,并非所有方法都可以在接...