zookeeper笔记

1、定义作用

zookeeper是典型的一个分布式数据一致性的解决方案,分布式应用程序协调服务。

zookeeper为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。

主要功能有:数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列

2、四大节点

临时节点、临时顺序节点、永久节点、永久顺序节点

临时节点:客户端session关闭之后,节点会被删除

顺序节点:顺序节点是在节点后按顺序添加十位数字

3、事件、监听

数据一旦发生变化,客户端会立即感应到。

主要有事件:None,NodeCreated, NodeDataChanged, NodeDeleted, NodeChildrenChanged

ZK的所有读操作都可以设置watch监视点: getData, getChildren, exists. 写操作则是不能设置监视点的。

实现Watcher接口

4、leader选举

博客

5、数据同步

博客

6、启动

docker pull zookeeper
docker run --name myZookeeper --restart always -e JVMFLAGS="-Xmx1024m" -p 2181:2181 zookeeper
docker exec -it 6383fb95f639  /bin/bash

7、zkCli.sh 基本命令

远程连接 ./zkCli.sh -timeout 0 -r -server ip:port ./zkCli.sh -timeout 5000 -server 192.9.200.242:2181

create [-s] [-e] path data acl -s 表示是顺序节点 -e 标识是临时节点 path 节点路径 data 节点数据 acl 节点权限

ls path:查看某个节点下的所有子节点信息(ls -s显示详情)

stat path :获取指定节点的状态信息

get path 获取当前节点的数据内容

delete path [version] 删除指定路径的节点 如果有子节点要先删除子节点

rmr path 删除当前路径节点及其所有子节点

8、客户端demo

package com.taoge.test;

import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;

import java.util.concurrent.CountDownLatch;

/**
 * Desc:
 *
 * @author taoxuefeng
 * @date 2021/5/28
 */
public class Main {


    public static void main(String[] args) {
        try {
            final CountDownLatch countDownLatch = new CountDownLatch(1);
            ZooKeeper zooKeeper =
                    new ZooKeeper("localhost:2181",
                            4000, new Watcher() {
                        @Override
                        public void process(WatchedEvent event) {
                            if (Event.KeeperState.SyncConnected == event.getState()) {
                                //如果收到了服务端的响应事件,连接成功
                                countDownLatch.countDown();
                            }
                        }
                    });
            countDownLatch.await();
            //CONNECTED
            zooKeeper.create("/c", "c".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            System.out.println(zooKeeper.getState());
            byte[] data = zooKeeper.getData("/c", true, new Stat());
            System.out.println(new String(data));
            zooKeeper.delete("/c", -1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

curator开发

package com.taoge.test;

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.data.Stat;

/**
 * Desc:
 *
 * @author taoxuefeng
 * @date 2021/5/28
 */
public class Main2 {

    public static void main(String[] args) throws Exception {
        CuratorFramework curatorFramework = CuratorFrameworkFactory.
                builder().connectString("127.0.0.1:2181").
                sessionTimeoutMs(4000).retryPolicy(new
                ExponentialBackoffRetry(1000, 3)).
                namespace("").build();
        curatorFramework.start();
        Stat stat = new Stat();
        //查询节点数据
        byte[] bytes = curatorFramework.getData().storingStatIn(stat).forPath("/c");
        System.out.println(new String(bytes));
        curatorFramework.close();
    }
}

results matching ""

    No results matching ""