zookeeper入门教程

zookeeper使用场景,不是很难了解,感觉zk监听节点变化,这个功能比较厉害。zk存储的节点组织结构有点像unix文件系统

1.安装zk

运行环境

centos 7

java 8

zookeeper

1.1 下载zk

https://zookeeper.apache.org/releases.html

下载解压到/opt/soft,复制conf/zoo_sample.cfg到zoo.cfg

安装完成,就是一个解压,拷贝配置文件的过程。当然这是单机版的安装,实际生产环境是不建议单台安装zk。存在单点故障问题,建议集群部署zk,zk使用的是ZAB协议,基于PAXOS的,建议部署3台以上的奇数。方便选出zk集群leader。

1.2 启动zk

bin/zkServer.sh start

通过bin/zkCli.sh连接zk检查是否启动成功,或者jps查看进程是否存在,ps 等命令

2. java客户端连接zk

通过java客户端连接zk demo

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

import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;

/**
 * Created by gxf on 2016/12/17.
 */
public class TestClient extends Thread implements Watcher{
    public ZooKeeper zooKeeper;
    private static final int SESSION_TIME_OUT = 2000;
    private CountDownLatch countDownLatch = new CountDownLatch(1);

    public void connectToZookeeper(String host) throws IOException, InterruptedException {
        zooKeeper = new ZooKeeper(host, SESSION_TIME_OUT, this);
        countDownLatch.await();
        System.out.println("zookeeper connect ok.e");
    }

    public byte[] getNodeValue(String path) throws KeeperException, InterruptedException {
        return this.zooKeeper.getData(path, true, null);
    }

    public void closeZookeeperConnection() throws InterruptedException {
        zooKeeper.close();
    }

    public String createNode(String path, byte data[]) throws KeeperException, InterruptedException {
        return this.zooKeeper.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    }

    public List<String> getChildren(String path) throws KeeperException, InterruptedException {
        return this.zooKeeper.getChildren(path, false);
    }

    public Stat setDada(String path, byte[] data, int version) throws KeeperException, InterruptedException {
        return this.zooKeeper.setData(path, data, version);
    }

    public void deleteNode(String path, int version) throws KeeperException, InterruptedException {
        this.zooKeeper.delete(path, version);
    }

    @Override
    public void process(WatchedEvent watchedEvent) {
        System.out.println("监听到事件 : " + watchedEvent.getState());
        System.out.println("事件类型: " + watchedEvent.getType());
        try {
            this.getNodeValue("/zk_test");
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if(watchedEvent.getState() == Event.KeeperState.SyncConnected){
            System.out.println("watcher received event.");
            countDownLatch.countDown();
        }//if
    }

    public void run(){
        while(true){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String args[]) throws IOException, InterruptedException, KeeperException {
        TestClient testClient = new TestClient();

        String host = "192.168.211.129:2181";
        testClient.connectToZookeeper(host);

        testClient.start();
        byte[] data = testClient.getNodeValue("/zk_test");
        String dataOfString = new String(data);
        System.out.println("dataOfString = " + dataOfString);
//
////        testClient.createNode("/zk_book", "books".getBytes());
//        byte []data1  = testClient.getNodeValue("/zk_book");
//        String data1OfString = new String(data1);
//        System.out.println("data1OfString = " + data1OfString);

//        testClient.closeZookeeperConnection();
    }
}

这里起了一个线程,主要是测试watch节点的变化用的。

时间: 2024-08-29 10:27:33

zookeeper入门教程的相关文章

Maven入门教程

Maven入门教程一.maven简介 Maven是一个项目管理工具 它包含: 一个项目对象模型 (Project Object Model) 一组标准集合 一个项目生命周期(Project Lifecycle) 一个依赖管理系统(Dependency Management System) 用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑 项目结构: 源代码放在src/main/java 源代码的资源文件放在src/main/resources 测试代码放在sr

Kafka教程(一)Kafka入门教程

1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久性.安全性以及日志记录.消息服务器可以使用一个或多个代理实例. JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生.发送.接收消息的接口简化企业应用的开发,翻译为Java

Docker Swarm入门教程

迄今为止,Docker Swarm问世已有一年的时间.Docker Swarm的首次隆重亮相要追溯到2014年,Docker官方在当年12月的DockerConEU峰会上正式推出了Docker Swarm.Docker Swarm不仅是一种用于管理Docker及Docker Machine的集群管理工具,同时也是一种CLI工具,可用来控制Docker主机.Docker官方意在通过Docker Swarm提供一套全面的.能够覆盖容器运行的各个环节的集成式解决方案,并突破自身的现有定位,实现从单纯提

一条数据的HBase之旅,简明HBase入门教程-Write全流程

如果将上篇内容理解为一个冗长的"铺垫",那么,从本文开始,剧情才开始正式展开.本文基于提供的样例数据,介绍了写数据的接口,RowKey定义,数据在客户端的组装,数据路由,打包分发,以及RegionServer侧将数据写入到Region中的全部流程. NoSQL漫谈 本文整体思路 前文内容回顾 示例数据 HBase可选接口介绍 表服务接口介绍 介绍几种写数据的模式 如何构建Put对象(包含RowKey定义以及列定义) 数据路由 Client侧的分组打包 Client发RPC请求到Regi

Go-Micro框架入门教程(一)---框架结构

Go语言微服务系列文章,使用golang实现微服务,这里选用的是go-micro框架,本文主要是对该框架的一个架构简单介绍. 1. 概述 go-micro是go语言下的一个很好的微服务框架. 1.服务间传输格式为protobuf,效率上没的说,非常的快,也很安全. 2.go-micro的服务注册和发现是多种多样的.我个人比较喜欢etcdv3的服务服务发现和注册. 3.主要的功能都有相应的接口,只要实现相应的接口,就可以根据自己的需要订制插件. 2. 通信流程 go-micro的通信流程大至如下

&lt;zz&gt;bower入门教程

from http://www.cnblogs.com/xiaokai0203/p/5891927.html bower入门教程 什么是bower Bower是一个客户端技术的软件包管理器,它可用于搜索.安装和卸载如JavaScript.HTML.CSS之类的网络资源.其他一些建立在Bower基础之上的开发工具,如YeoMan和Grunt,这个会在以后的文章中介绍. 准备工作 安装node环境:node.js 安装Git,bower从远程git仓库获取代码包:git简易指南 安装bower 使用

【转载】GBDT(MART) 迭代决策树入门教程 | 简介

      转载地址:http://blog.csdn.net/w28971023/article/details/8240756        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案.它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法.近些年更因为被用于搜索排

SEO学习步骤总结入门教程

在这里,简单的把SEO的学习步骤说了一下,今天我们一起来把SEO学习步骤每一步的主要内容拿出来重点强调一下并做个总结.  定位好网站内容以后把你所想做排名的关键词定位好,关键词里包括了主关键词和长尾关键词.这里重点强调了不可以忽略长尾关键词的作用.  对于一个好的网站结构可以让搜索引擎蜘蛛顺利的抓取我网站的内容,进而达到被收录的目的.比较有利于蜘蛛抓取的网站结构,一般来说,收录数量相对来说会比较多.,只有让搜索引擎收录你网站页面那搜索引擎才会释放出来,这样网站关键词才可能有排名.  这里重点要注

Android基础入门教程——10.12 传感器专题(3)——加速度-陀螺仪传感器

Android基础入门教程--10.12 传感器专题(3)--加速度/陀螺仪传感器 标签(空格分隔): Android基础入门教程 本节引言: 本节继续来扣Android中的传感器,本节带来的是加速度传感器(Accelerometer sensor)以及 陀螺仪传感器(Gyroscope sensor),和上一节的方向传感器一样有着x,y,z 三个轴, 还是要说一点:x,y轴的坐标要和绘图那里的x,y轴区分开来!传感器的是以左下角 为原点的!x向右,y向上!好的,带着我们的套路来学本节的传感器吧