首页 > 代码库 > Zookeeper初探

Zookeeper初探

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

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

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

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

ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有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 = "http://www.mamicode.com/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>    

 

Zookeeper初探