• Zookeeper初探


    分布式编程中,网络中各个节点的数据同步,数据一致性保障,事务控制,容错控保障等都需要一个稳定可靠的协调服务。Zookeeper则是分布式程序中使用最广泛的协调服务技术。从前面的kafka,storm,ignite使用文章中我们可以看到,Zookeeper广泛用于这些方分布式大数据技术的节点选举以及数据同步等服务。百度百科上对Zookeeper的介绍如下:

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

    ZooKeeper包含一个简单的原语集,[1]  提供Java和C的接口。

    ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3src ecipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

    Zookeeper实际上组织了一个分布式的树形目录数据结构(类似windows的文件夹系统),各个Zookeeper节点可以同步监听目录树的增删改,所以可以通过对目录树的操作来达到数据同步的目的。

    本文简单介绍Zookeeper在Java编程中对树形目录增删改操作,Zookeeper详细介绍请参考后续文章。

    1、 Zookeeper服务端搭建暂且不表,可以参考《Ignite集群管理——基于Zookeeper的节点发现》中单机zookeeper的安装步骤;

    2、 Zookeeper树形目录增删改查代码

    package com.coshaho.learn.zookeeper;
    
    import org.apache.zookeeper.CreateMode;
    import org.apache.zookeeper.ZooDefs.Ids;
    import org.apache.zookeeper.ZooKeeper;
    
    /**
     * 
     * ZookeeperTest.java Create on 2017年6月10日 下午11:07:02    
     *    
     * 类功能说明:   zookeeper入门
     *
     * Copyright: Copyright(c) 2013 
     * Company: COSHAHO
     * @Version 1.0
     * @Author coshaho
     */
    public class ZookeeperHelloWorld 
    {
        private static final int TIME_OUT = 3000;
        private static final String HOST = "192.168.1.104:12181";
        public static void main(String[] args) throws Exception
        {
            ZooKeeper zookeeper = new ZooKeeper(HOST, TIME_OUT, null);
            
            // 创建目录/coshaho
            if(zookeeper.exists("/coshaho", false) == null)
            {
                // 参数:目录名称,目录数据,不进行ACL控制,节点为永久性目录
                zookeeper.create("/coshaho", "zookeeper, I'm comming.".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            }
            
            // 查询目录/coshaho数据
            System.out.println("节点/coshaho数据为:" + new String(zookeeper.getData("/coshaho", false, null)));
            
            // 创建目录/coshaho/learn
            if(zookeeper.exists("/coshaho/learn", false) == null)
            {
                zookeeper.create("/coshaho/learn", "Hello, zookeeper.".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            }
            
            // 查询目录/coshaho/learn数据
            System.out.println("节点/coshaho/learn数据为:" + new String(zookeeper.getData("/coshaho/learn", false, null)));
            
            // 修改目录/coshaho/learn数据
            String data = "I have modified node text.";
            zookeeper.setData("/coshaho/learn", data.getBytes(), -1);
            
            // 查询目录/coshaho/learn数据
            System.out.println("修改节点/coshaho/learn数据后:" + new String(zookeeper.getData("/coshaho/learn", false, null)));
            
            // 删除目录
            //zookeeper.delete("/coshaho/learn", -1);
    
            zookeeper.close();
        } 
    }

    3、 运行结果

    4、 命令行连接Zookeeper服务端:zkCli.sh -server {IP}:{Port}

     5、 可以看到,/coshaho/learn目录成功创建,/coshaho目录文本信息和程序设置一致

     6、 maven配置

    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.4.6</version>
    </dependency>    
  • 相关阅读:
    java线程简要
    Unable to find explicit activity class
    用NetBeans生成jar文件
    Linux下三个可以修改环境变量的地方
    linux定时执行shell脚本
    sql server 性能调优之 SQL语句阻塞查询
    sql server 性能调优之 死锁排查
    IObit Advanced SystemCare 系统清理优化工具
    IDEA配置Maven
    maven的生命周期及常用命令的使用
  • 原文地址:https://www.cnblogs.com/coshaho/p/6980411.html
Copyright © 2020-2023  润新知