Zookeeper的了解

1、 什么是Zookeeper

 zookeeper是一个Java语言写的分布式协调工具,它既能作为微服务的注册中心,也能利用zookeeper实现业务逻辑,zooeeper从实现的角度来看,是采用观察者模式,它负责存储和管理数据,然后接受客户端的注册,当客户端的数据发生变化的时候,它会负责通知相应的服务,对应的数据发生变化;
复制代码

2、 Zookeeper的作用

 统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、负载均衡等
复制代码

3、 Zookeeper的节点类型

注册到Zookeeper的节点类型称为ZNode,节点类型分为临时节点和持久化节点,临时节点分为临时节点和临时顺序节点,持久化节点分为持久化节点和持久化顺序节点;临时节点与会话保持连接,当会话断开之后,临时节点也跟着消失;持久化节点是保存到硬盘上的,无论会话断不断开,都会保存节点,而且节点不允许重复,所以当节点发生变化的时候,Zookeeper会通知相应客户端,对应的节点发生变化;
复制代码

4、 Zookeeper中的Watch事件

Zookeeper中节点数据变化的通知就是利用了Zookeeper的watch事件,而且事件只会触发一次;其类型有create、exisit、delete事件
复制代码

(1)Zookeeper的连接:

  private String connectString = "127.0.0.1:2181";
  private int sessionTimeout = 2000;
  private ZooKeeper zkClient;
  @Before
  public void init() throws IOException {

    zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {

        @Override
        public void process(WatchedEvent event) {
        }
    });
}
复制代码

(2) 判断节点是否存在

@Test
public void exist() throws KeeperException, InterruptedException {

    Stat stat = zkClient.exists("/test", false);

    System.out.println(stat == null ? "not exist" : "exist");
}
复制代码

(3) 创建节点

 @Test
public void createNode() throws KeeperException, InterruptedException {

    User user = new User();
    user.setId(1);
    user.setUsername("aa");

    String json = JSON.toJSONString(user);


    String path = zkClient.create("/" + json, json.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

    if (path != null) {
        System.out.println(path);
    }

    Stat stat = new Stat();

    String str = new String(zkClient.getData("/" + json, true, stat));

    System.out.println(str);

    System.out.println(stat.getAversion());
    System.out.println(stat.getVersion());


    User user1 = new User();
    user1.setId(2);
    user1.setUsername("aa");

    String json1 = JSON.toJSONString(user1);

    String path1 = zkClient.create("/" + json1, json1.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

    if (path1 != null) {
        System.out.println(path1);
    }

}
复制代码

这里需要注意的是,创建节点的"/"需要,由于Zookeeper创建相同节点的时候,会抛异常,所以在创建节点的时候,需要用exists判断该节点是否存在;

5、 Zookeeper集群

 zookeeper集群必须保证有n/2+1台机器存活,其集群才能正常运行,也就是至少3台zookeeper存在,其集群才不受到影响,而且zookeeper的集群采用ZAB协议,其有:
 (1)消息广播
  当leader收到消息之后,它会把消息广播给其他的服务器
(2)崩溃恢复
 当leader宕机等,zookeeper就会重新选举出新的leader
复制代码

猜你喜欢

转载自juejin.im/post/5d7f914251882541303dab9c