CliCommand的所有子类就是zk能提供的所有命令,具体如下:

为了说明问题,只以DeleteCommand为例。
public DeleteCommand() {
super("delete", "[-v version] path");
public CliCommand parse(String[] cmdArgs) throws CliParseException {
Parser parser = new PosixParser();
try {
cl = parser.parse(options, cmdArgs);
} catch (ParseException ex) {
throw new CliParseException(ex);
args = cl.getArgs();
if (args.length < 2) {
throw new CliParseException(getUsageStr());
retainCompatibility(cmdArgs);
return this;
public boolean exec() throws CliException {
String path = args[1];
int version;
if (cl.hasOption("v")) {
version = Integer.parseInt(cl.getOptionValue("v"));
} else {
version = -1;
try {
zk.delete(path, version);
} catch (IllegalArgumentException ex) {
throw new MalformedPathException(ex.getMessage());
} catch(KeeperException|InterruptedException ex) {
throw new CliWrapperException(ex);
return false;
delete命令执行流程:
- 解析delete命令参数,当delete指定version之后可以通过cl.getOptionValue(“v”)获取
- 调用zk.delete方法删除节点,构造DeleteRequest对象发送到zk服务端,并将返回元数据封装成ReplyHeader对象(几乎所有客户端的请求都是使用这样的方式和服务端交互,唯一不同的是封装的请求对象不同)。具体代码如下。
public void delete(final String path, int version)
throws InterruptedException, KeeperException
final String clientPath = path;
PathUtils.validatePath(clientPath);
final String serverPath;
if (clientPath.equals("/")) {
serverPath = clientPath;
} else {
serverPath = prependChroot(clientPath);
RequestHeader h = new RequestHeader();
h.setType(ZooDefs.OpCode.delete);
DeleteRequest request = new DeleteRequest();
request.setPath(serverPath);
request.setVersion(version);
ReplyHeader r = cnxn.submitRequest(h, request, null, null);
if (r.getErr() != 0) {
throw KeeperException.create(KeeperException.Code.get(r.getErr()),
clientPath);
cnxn.submitRequest这个是客户端和服务端交互的入口,在后面会介绍。
zk版本:3.5.61.引入在单机模式下zk服务启动前面已经介绍了,现在将介绍如何通过客户端的形式访问zk服务。其实访问zk服务有很多方式,可以通过java api等,但是这种方式稍微有点复杂,我们现在通过最简单的一种方式实现zk的客户端,即zk自带的cli。2.命令行使用在安装zookeeper之后,我们会使用zkStart.sh的命令启动zk服务,接着会使用zkCli.sh -se...
zookeeper工作机制
Zookeeper从设计模式角度来理解
是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就 将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。
zookeeper的特点
1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
2)集群中只要有半数以上节点存活,Zookeeper集群就能正常
Znode 临时节点特性:
start Thread>run方法
org.apache.zookeeper.server.quorum.QuorumPeer#startLeaderElection 选举背景知识CAP 一致性协议
WkRequestHeader{protocolVersion=45, lastZxidSeen=0, timeOut=0, sessionId=21474836480000, passwd=[]}
1.zookeeper概要
ZooKeeper是用于分布式应用程序的协调服务。它公开了一组简单的API,分布式应用程序可以基于这些API用于同步,节点状态、配置等信息、服务注册等信息。其由JAVA编写,支持JAVA 和C两种语言的客户端。
znode节点
zookeeper 中数据基本单元叫节点,节点之下可包含子节点,最后以树级方式程现。每个节点拥有唯一的路径path。客户端基于PATH上传节点...
问题一: 下载ant-eclipse-1.0.bin.tar.bz2失败
问题二: 下载某个jar包异常导致编译失败
问题三: UnknowHostExecption:repo2.maven.org
3. 导入zookeeper源码到Idea中
3.1 zookeeper项目导入
3.2 配置zoo.cfg
3.3 引入maven依赖
3.4 启动zookeeper
问题一: org.apache.zookeep