1.Zookeeper的特点
- 是一个简单的文件系统:提供排序和通知
- Zookeeper可以实现多种协调数据结构和协议
分布式队列、分布式锁、领导者协议 - Zookeeper的高可用性
可以避免打点故障 - Zookeeper是一个通用资源库
所有用户都可以对资源库进行修改和添加
Zookeeper的API
connect 连接到zookeeper集合
create 创建znode
Zookeeper辅助类Watcher
当zookeeper实例被创建时,一定要等到与Zookeeper服务器连接成功才能使用该实例,当客户端与Zookeeper服务器建立连接时Watcher回调process(),
public void process(WatcherEvent event)事件回调函数
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.ACL;
import java.util.List;
import java.util.concurrent.CountDownLatch;
/**
* @description: zookeeper create group
* @author: Ksssss(chenlin @ hoolai.com)
* @time: 2019-10-24 20:22
*/
public class CreateGroup implements Watcher {
private final static int MAX_CONNECT_TIME = 5000;
private CountDownLatch countDownLatch = new CountDownLatch(1);
private ZooKeeper zk;
/**
* @param host 服务器地址端口默认2181
* @throws Exception
*/
public CreateGroup(String host) throws Exception {
zk = new ZooKeeper(host, MAX_CONNECT_TIME, this);
countDownLatch.await();
}
/**
* 当Zookeeper连接建立成功,回掉process()
*
* @param watchedEvent
*/
public void process(WatchedEvent watchedEvent) {
if (watchedEvent.getState() == Event.KeeperState.SyncConnected)
countDownLatch.countDown();
}
/**
* @param path Znode路径
* @param data Znode的数据
* @param acls 节点访问控制权限列表
* @param createMode 节点的类型
*/
public void create(String path, byte[] data, List<ACL> acls, CreateMode createMode) throws InterruptedException, KeeperException {
zk.create(path, data, acls, createMode);
}
public void close() throws InterruptedException {
zk.close();
}
public static void main(String[] args) {
System.out.printf("%s\t%s\t", args[0], args[1]);
try {
CreateGroup createGroup = new CreateGroup(args[0]);
createGroup.create(args[1], null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
createGroup.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
ZooKeeper服务
- 数据模型
-
zookeeper具有简单的树形结构,树的结点称为znode,每个znode都有一个ACL(权限控制),也可以存储数据(数据在1mb内)
-
zookeeper具有原子性,要么全部读,要么全部写(注意:读到的数据可能和znode的数据不同步,但是写一定是会保存在znode中)
-
zookeeper的znode地址一定是绝对地址,不支持./..之类,zookeeper是保留字
-
- 操作
- 实现
- 一致性
- 会话
- 状态