当前位置: 首页 > article >正文

Zookeeper学习心得

本人学zookeeper时按照此文路线学的

Zookeeper学习大纲 - 似懂非懂视为不懂 - 博客园

一、Zookeeper安装

ZooKeeper 入门教程 - Java陈序员 - 博客园 

Docker安装Zookeeper教程(超详细)_docker 安装zk-CSDN博客

二、 zookeeper的数据模型

ZooKeeper 入门教程 - Java陈序员 - 博客园 

三、使用zookeeper的一些API实现增删改查

Apache ZooKeeper的使用:

原链接找不到是哪个来着了,附上我学习用的代码

依赖

		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.6</version>
		</dependency>

代码示例:

/**
 * 配置zookeeper
 * yml配置:
 *  zookeeper:
 *      server: 192.168.1.198:2181
 *      timeout: 3000
 */
@Configuration
public class ZookeeperConfig {
    @Value("${zookeeper.server}")
    private String server;

    @Value("${zookeeper.timeout}")
    private Integer timeout;

    @Bean
    public ZooKeeper zkClient() throws IOException {
        return new ZooKeeper(server, timeout, watchedEvent -> {});
    }
}



/**
 * 增删改查
 */
@RestController
@RequestMapping("/api")
public class ZookController {

    @Autowired
    ZooKeeper zkClient;

    @GetMapping("/zookeeper")
    public String getData() throws KeeperException, InterruptedException {
        String path = "/zookeeper";
        boolean watch = true;
        byte[] data = zkClient.getData(path, watch, null);
        return new String(data);
    }

    @GetMapping("/addNode/{nodename}/{data}")
    public String addNode(@PathVariable("nodename")String nodename, @PathVariable("data") String data1){
        // 创建节点的路径
        String path = "/"+nodename;
        // 节点数据
        String data =data1;
        // 权限控制
        List<ACL> aclList = ZooDefs.Ids.OPEN_ACL_UNSAFE;
        // 创建节点的类型
        CreateMode createMode = CreateMode.PERSISTENT;

        String result = null;
        try {
            result = zkClient.create(path, data.getBytes(), aclList, createMode);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return result;
    }

    @GetMapping("/getData/{nodename}")
    public String getData(@PathVariable("nodename") String nodename){
        //数据的描述信息,包括版本号,ACL权限,子节点信息等等
        Stat stat = new Stat();
        //返回结果是byte[]数据,getData()方法底层会把描述信息复制到stat对象中
        byte[] bytes;
        String path="/"+nodename;
        try {
            bytes = zkClient.getData(path, false, stat);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        //打印结果
        System.out.println("ZNode的数据data:" + new String(bytes));//Hello World
        System.out.println("获取到dataVersion版本号:" + stat.getVersion());//默认数据版本号是0
        return new String(bytes);
    }
    @GetMapping("/setData/{nodename}/{data}")
    public String setData(@PathVariable("nodename")String nodename, @PathVariable("data") String data1) throws InterruptedException, KeeperException {
        String path = "/"+nodename;
        zkClient.exists(path, new MyWatcher());
        String data = data1;
        // 这里必须先拿到版本号才能更新
        int version =1;

        Stat stat = null;
        try {
            stat = zkClient.setData(path, data.getBytes(), version);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return stat.toString();
    }
    @GetMapping("/deleteNode/{nodename}")
    public String deleteNode(@PathVariable("nodename")String nodename){
        String path = "/"+nodename;
        int version = 0;
        try {
            zkClient.delete(path, version);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return "OK!";
    }
}

Curator客户端的使用

ZooKeeper 实战(三) SpringBoot整合Curator-开发使用篇-CSDN博客

四、使用Curator实现分布式锁、分布式id、watch事件监听

ZooKeeper 实战(四) Curator Watch事件监听_curatorwatcher-CSDN博客

ZooKeeper 实战(五) Curator实现分布式锁-CSDN博客 

ZooKeeper 实战(六) - 分布式ID实现方案_分布式id生成方案-CSDN博客

五、学习zookeeper集群

六、学习zookeeper的机制和原理

CAP理论

ZAB协议


http://www.kler.cn/a/413778.html

相关文章:

  • 大数据新视界 -- Hive 数据分区:精细化管理的艺术与实践(上)(7/ 30)
  • java全栈day10--后端Web基础(基础知识)
  • C#开发合集
  • Git旧文件覆盖引发思考
  • Oracle JDK(通常简称为 JDK)和 OpenJDK区别
  • wireshark基础
  • linux安全管理-日志审计
  • fatal error in include chain (rtthread.h):rtconfig.h file not found
  • 如何设置爬虫的异常处理?(代码示例)
  • 【Leetcode 每日一题】25. K 个一组翻转链表
  • 动态加载Jar包引发的“java.util.zip.ZipException: invalid distance too far back”
  • 定制独立站系统需要哪些技术支持?
  • 不间断电源 (UPS) 对现代技术可靠性的影响
  • 机器学习之DeepMind推出的DreamerV3
  • 代码随想录-笔记-其五
  • 基于springboot的登录校验
  • 通信网络安全
  • Java对象与XML互相转换(xstream)
  • 本地化部署 私有化大语言模型
  • ABAP OOALV模板
  • Android中ByteBuffer内存池设计示例
  • 23种设计模式之外观模式
  • linux添加附加磁盘
  • CFD 在生物反应器放大过程中的作用
  • 拍立淘按图搜索实战化,拍立淘API接口参数说明
  • 在 Ubuntu 上部署 MediaWiki 开源维基平台