0%

学习Zookeeper的使用

ZooKeeper没有直接用过,所以想研究下,本来读《ZooKeeper:分布式过程协同技术详解》,感觉还是很模糊,虽然大概明白分布式会需要这样一个东西,现在使用的Spring微服务中Eureka跟ZooKeeper有相似的地方。纸上得来终归浅,所以觉得跑一些实际的例子。

安装

我的环境是Mac,使用Brew安装。

可视化界面

ZooKeeper自带的zkCli命令行工具,其实也能用。也有可视化的界面工具ZKUI,最后使用的ZKUI。

客户端

使用的Java跑的例子,有点类似数据的增删改查了,当然也有监听。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Main {
// 连接地址及端口号
private static final String SERVER_HOST = "127.0.0.1:2181";

// 会话超时时间
private static final int SESSION_TIME_OUT = 2000;

public static void main(String[] args) throws Exception {
// 参数一:服务端地址及端口号
// 参数二:超时时间
// 参数三:监听器
ZooKeeper zooKeeper = new ZooKeeper(SERVER_HOST, SESSION_TIME_OUT, new Watcher() {
public void process(WatchedEvent event) {
// TODO Auto-generated method stub
// 获取事件的状态
Event.KeeperState state = event.getState();
// 判断是否是连接事件
if (Event.KeeperState.SyncConnected == state) {
Event.EventType type = event.getType();
if (Event.EventType.None == type) {
System.out.println("zk客户端已连接...");
}
}
}
});
zooKeeper.create("/go", "Hello World".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("新增ZNode成功");
zooKeeper.close();
}
}

更高级的可以使用Curator,出了基本的客户端功能外,还提供了锁、选举、屏障、缓存、持久化节点、队列这样的功能。

参考:
ZooKeeper入门,看这篇就够了!

书籍

目前的书籍不多,在省图找到了这本《ZooKeeper:分布式过程协同技术详解》,此书不太适合一点经验都没有的人阅读,
相对来说偏实战了。此书还在读,目前来看结构清晰,推荐。吐槽下《ZooKeeper:Distributed Process Coordination》的中文版翻译为《ZooKeeper:分布式过程协同技术详解》,把“Process”翻译为“过程”确实没有“进程”或者“程序”好。ZooKeeper官方的说明是一种协调分布式服务的应用程序,这个其实很贴合意思。

总结

我还是习惯了从代码理解原理,这么跑下来,至少从代码的角度是理解了。初看有点简单,不就是一些节点数据么,但这样也很容易陷入技术细节,所以还是要看几个应用场景的实际例子,从整体上理解。

参考:

原创ZooKeeper入门实战教程,这个博主系列文章非常不错,浅显明了。

Zookeeper 应用实例,入门级的例子。