zoukankan      html  css  js  c++  java
  • Windows-java-Zookeeper

    一、什么Zookeeper

    Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。

    1、zookeeper是为别的分布式程序服务的

    2、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)

    3、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统> 一名称服务等

    4、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:

    管理(存储,读取)用户程序提交的数据(类似namenode中存放的metadata); 
    并为用户程序提供数据节点监听服务;

    二、Zookeeper集群机制

    Zookeeper集群的角色: Leader 和 follower 
    只要集群中有半数以上节点存活,集群就能提供服务

    三、Zookeeper特性

    1、Zookeeper:一个leader,多个follower组成的集群

    2、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的

    3、分布式读写,更新请求转发,由leader实施

    4、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行

    5、数据更新原子性,一次数据更新要么成功,要么失败

    6、实时性,在一定时间范围内,client能读到最新数据

    四、Zookeeper客户端

    ZooKeeper命令行工具类似于Linux的shell环境,不过功能肯定不及shell啦,但是使用它我们可以简单的对ZooKeeper进行访问,数据创建,数据修改等操作.  使用 zkCli.sh -server 127.0.0.1:2181 连接到 ZooKeeper 服务,连接成功后,系统会输出 ZooKeeper 的相关环境以及配置信息。

    命令行工具的一些简单操作如下:

      1. 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容

      2. 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据

      3. 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串  

      4. 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串

      5. 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置

      6. 删除文件: delete /zk 将刚才创建的 znode 删除

      7. 退出客户端: quit

      8. 帮助命令: help

    五、小案例

      导入依赖

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

      修改名称

      打开服务

     

       index

    package com.ZooMckz;
    
    import org.apache.zookeeper.*;
    import org.apache.zookeeper.data.Stat;
    
    import java.io.IOException;
    import java.util.concurrent.CountDownLatch;
    
    public class index {
    
        /**
         * 集群连接地址
         */
        private static final String CONNECT_ADDR = "0.0.0.0:2181";
        /**
         * session超时时间
         */
        private static final int SESSION_OUTTIME = 2000;
        /**
         * 信号量,阻塞程序执行,用户等待zookeeper连接成功,发送成功信号,
         */
        private static final CountDownLatch countDownLatch = new CountDownLatch(1);
    
        public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
            /**
             * 连接zooheeper
             *
             * 步骤一:创建zooheeper对象
             *
             */
    
            ZooKeeper zooKeeper=new ZooKeeper(CONNECT_ADDR, SESSION_OUTTIME, new Watcher() {
                @Override
                public void process(WatchedEvent event) {
                    Event.KeeperState keeperState = event.getState();
                    System.out.println("成功连接!!!");
                }
            });
    
            //创建节点
            zooKeeper.create("/zk01","value01".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    
    
            //获取节点
            byte[] zk01s = zooKeeper.getData("/zk01", false, new Stat());
            System.out.println(new String(zk01s,"UTF-8"));
    
            //修改节点
            zooKeeper.setData("/zk01","wahahahavalues".getBytes(),0);
    
    
            //获取节点
            byte[] zk01ss = zooKeeper.getData("/zk01", false, new Stat());
            System.out.println(new String(zk01ss,"UTF-8"));
    
            //删除节点
            zooKeeper.delete("/zk01",-1);
    
    
            //关闭连接
            zooKeeper.close();
        }
    }
  • 相关阅读:
    Java 中的定时任务(一)
    超实用 Git 使用方式介绍
    TCP 建立连接为什么要握 3 次手?
    OSI、TCP、IP、UDP 这些都是啥??
    Java 中线程安全问题
    PlantUML——3.Graphviz的安装
    PlantUML——2.中文乱码及解决
    PlantUML——1.Hello
    maven实战系列
    NGUI优化之Drawcall
  • 原文地址:https://www.cnblogs.com/whtt/p/11929043.html
Copyright © 2011-2022 走看看