ZooKeeper是一个分布式开源协调服务,主要用于分布式应用的协调和管理。它提供了一些核心功能,如配置管理、分布式锁、集群管理和命名服务等,以实现分布式应用的一致性和可靠性。ZooKeeper采用Zab协议来保证各个Server之间的同步,并支持多种客户端编程语言,如Java、Python和C++等。
zkServer.sh start
Java客户
import org.apache.zookeeper.ZooKeeper;
public class ZooKeeperClient {
private static final String ZOOKEEPER_ADDRESS = "localhost:2181";
private static final int SESSION_TIMEOUT = 3000;
public static ZooKeeper createClient() throws IOException {
return new ZooKeeper(ZOOKEEPER_ADDRESS, SESSION_TIMEOUT, event -> {
if (event.getState() == Watcher.Event.KeeperState.SyncConnected) {
System.out.println("Connected to ZooKeeper");
}
});
}
public static void main(String[] args) throws IOException, InterruptedException {
ZooKeeper zkClient = createClient();
zkClient.create("/myNode", "Hello, ZooKeeper!".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
byte[] data = zkClient.getData("/myNode", false, null);
System.out.println("Node data: " + new String(data));
zkClient.close();
}
}
ZooKeeper的核心概念
- 节点(Node):ZooKeeper中的基本数据单元,每个节点包含一个键值对,节点之间可以创建父子关系。
- 目录(Directory):在ZooKeeper中,一个目录可以包含零个或多个节点。
- 数据(Data):ZooKeeper中的数据由节点存储,可以是字符串、字节数组或其他数据结构。
- 权限(ACL):ZooKeeper中的每个节点都可以设置访问权限,以控制哪些客户端可以访问该节点。
- 客户端(Client):连接到ZooKeeper服务器的应用程序,可以发送请求来操作ZooKeeper中的数据。
- 服务器(Server):ZooKeeper集群中的每个节点都是一个服务器,负责存储和处理客户端的请求。
- 集群(Cluster):由多个ZooKeeper服务器组成的集合,可以提供高可用性和负载均衡。
ZooKeeper的基本操作
- 创建节点(Create):创建一个新节点,并设置节点的键值对。
- 删除节点(Delete):删除指定的节点。
- 获取节点(Get):获取指定节点的值。
- 更新节点(Set):更新指定节点的值。
- 获取子节点(GetChildren):获取指定节点的子节点列表。
- 断开连接(Disconnect):断开与ZooKeeper服务器的连接。
ZooKeeper学习资料:
- ZooKeeper官方文档:https://zookeeper.apache.org/documentation/
- 《ZooKeeper分布式协调服务》:https://book.douban.com/subject/26328070/
- 《ZooKeeper实战》:https://book.douban.com/subject/26337863/