Jasper Ji

博观而约取,厚积而薄发。

学习Zookeeper的使用

2021-06-22 15:03

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

安装

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

可视化界面

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

客户端

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

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 应用实例,入门级的例子。

Comments