Zookeeper 客户端使用Packet来管理消息,. Packet管理 请求包头(RequestHeader)和请求包体(Record的不同实现,类似于ExistsRequest在调用zookeeper.exists时发送),应答包头(ReplyHeader)和应答包体(Record的不同实现,类似于ExistsResponse). 与服务器进行通信时,依靠自己实现序列化方式来序列化请求包头以及请求包体,并且反序列化应答包头以及应答包体。
请求包序列化格式:
第一部分:4个字节表示整个包的长度(包头+包体)
第二部分:关注RequestHeader 类,Header包头,总共8个字节,前4个字节表示客户端生成的xid,用于跟踪包,采用自增方式生成的,需要服务器在响应时返回,后四个字节表示本包的操作类型:即ZooDefs.OpCode,它是一个整数值,分别代表"notification", "create","delete", "exists","getData", "setData", "getACL","setACL","getChildren", "getChildren2","getMaxChildren",
"setMaxChildren", "ping"。getChildren和getChildren2操作的区别在于是否返回Stat统计数据,返回统计数据Stat的操作是getChildren2。
第三部分:关注Record接口的任何实现类,optional,因此长度字节数不固定,可以没有这一部分,例如ping操作,检测心跳不需要任何其他额外信息,只发Header,更多时候第三部分是存在的,根据第二部分的操作类型,可能需要提供一个操作的具体信息,例如操作路径path,是否watch等等,根据包体自己的方式来序列化。例如ExistsRequest
对于SetData操作来说,它包含有数据以及版本号:
应答包序列化格式:
和请求包格式差不多,也分为三个部分
第一部分:4个字节表示整个应答包的长度(包头+包体)
第二部分:关注ReplyHeader类,16个字节长度,前面4个字节是xid,中间8个字节是zxid,表示事务id,最后4个字节表示err信息.
Err的值请关注Code类
第三部分:关注Record接口的任何实现类,例如对于ExistResponse。
包体包含一个stat的统计信息。
客户端和服务器在交互时,有几个特殊的xid,分别的表示含义如下:
Request: Xid: -8表示reconnect时重新设置watches,-2表示ping 包,-4表示auth
Response: xid -2 表示ping的响应,-4 表示auth的响应,-1表示本次响应时有watch事件发生
注:
客户端两个线程:一个发送线程,一个事件线程,发送线程从队列中依次发送请求,并接收响应,客户端生成xid,服务器返回这个xid,通过对比xid来保证接收到的消息有序,如果不是有序的,那么表示有消息丢失,丢失后,客户端会重新使用sessionid进行再一次连接服务器,每一次连接timeout或者readtimeout或者消息丢失都会导致之前注册的watch被保留,同步方法调用会抛出异常,异步调用方法会导致processResult调用,所有等待发送到服务器的outgoingQueue和已经发送去服务器等待应答的pendingQueue都将被clear。当session失效,那么这两个线程都会退出,需要重新创建一个zookeeper实例才能重新进行连接。
分享到:
相关推荐
赠送jar包:zookeeper-3.3.3.jar; 赠送原API文档:zookeeper-3.3.3-javadoc.jar; 赠送源代码:zookeeper-3.3.3-sources.jar; 包含翻译后的API文档:zookeeper-3.3.3-javadoc-API文档-中文(简体)版.zip 对应...
赠送jar包:zookeeper-3.3.3.jar 赠送原API文档:zookeeper-3.3.3-javadoc.jar 赠送源代码:zookeeper-3.3.3-sources.jar 包含翻译后的API文档:zookeeper-3.3.3-javadoc-API文档-中文(简体)-英语-对照版.zip ...
动物园管理员服务器 org.apache.zookeeper/zookeeper/3.3.3/zookeeper-3.3.3.jar
zookeeper.-3.3.5.jar 工具类
zookeeper可视化工具
第2章 ZooKeeper之序列化组件源码解析【透视现象,直击本质】 第4章 持久化【高手过招必备】 第6章 服务器启动 【由浅入深,先学好单机版,才能掌握集群版】 第7章 会话管理 【无处不在的会话其实没那么难】 第8章 ...
zookeeper客户端 图形化界面zookeeper客户端 图形化界面zookeeper客户端 图形化界面zookeeper客户端 图形化界面zookeeper客户端 图形化界面
Zookeeper源码分析.epub
JAVA面试题(Zookeeper、消息队列、分布式等最新的也有)
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、...
Zookeeper数据节点可视化查看工具; 下载解压后即可使用; 内有说明文本。 Zookeeper数据节点可视化查看工具; 下载解压后即可使用; 内有说明文本。 Zookeeper数据节点可视化查看工具; 下载解压后即可使用...
zookeeper源码分析(一)工作原理概述 zookeeper源码分析(二)FastLeader选举算法 Zookeeper源码分析之Paxos算法之旅
ZooInspector,工具图形化展示工具,zookeeper图形化的客户端工具(ZooInspector)。页面很形象,直观zookeeper 树节点
zookeeper可视化管理工具
zookeeper的可视化工具
zookeeper可视化窗口,查看zookeeper节点数据以及状态。
本篇文章记录centos6下ActiveMQ+Zookeeper消息中间件集群-完整部署过程,讲解十分详细,本人线上实操手册。在此分享出来,希望能帮助到有用到的朋友。
需要zookeeper可视化界面ZooInspector的用血可以下载,方便管理zookeeper
Linux下,通过shell编写的自动化安装zookeeper的脚本,内含zookeeper-3.4.6
apache-hive-3.1.3-bin.tar.gz apache-zookeeper-3.5.10-bin.tar.gz hadoop-3.3.3.tar.gz spark-3.2.1-bin-hadoop3.2.tgz mysql-8.0.29-1.el8.x86_64.rpm-bundle