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节点的变化用的。
zookeeper入门教程的更多相关文章
- java springboot整合zookeeper入门教程(增删改查)
java springboot整合zookeeper增删改查入门教程 zookeeper的安装与集群搭建参考:https://www.cnblogs.com/zwcry/p/10272506.html ...
- kafka入门教程链接
http://www.aboutyun.com/forum.php?mod=viewthread&tid=12882 经典入门教程 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创 ...
- Apache Solr入门教程(初学者之旅)
Apache Solr入门教程(初学者之旅) 写在前面:本文涉及solr入门的各方面,建议边思考边实践,相信能帮助你对solr有个清晰全面的了解并能简单实用. 在Apache Solr初学者教程的这个 ...
- 一条数据的HBase之旅,简明HBase入门教程-Write全流程
如果将上篇内容理解为一个冗长的"铺垫",那么,从本文开始,剧情才开始正式展开.本文基于提供的样例数据,介绍了写数据的接口,RowKey定义,数据在客户端的组装,数据路由,打包分发, ...
- 一条数据的HBase之旅,简明HBase入门教程-开篇
常见的HBase新手问题: 什么样的数据适合用HBase来存储? 既然HBase也是一个数据库,能否用它将现有系统中昂贵的Oracle替换掉? 存放于HBase中的数据记录,为何不直接存放于HDFS之 ...
- RabbitMQ入门教程(十七):消息队列的应用场景和常见的消息队列之间的比较
原文:RabbitMQ入门教程(十七):消息队列的应用场景和常见的消息队列之间的比较 分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 这是网上的一篇教程写的很好,不知原作 ...
- Go-Micro框架入门教程(一)---框架结构
Go语言微服务系列文章,使用golang实现微服务,这里选用的是go-micro框架,本文主要是对该框架的一个架构简单介绍. 1. 概述 go-micro是go语言下的一个很好的微服务框架. 1.服务 ...
- sentinel (史上最全+入门教程)
文章很长,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈 为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 < Java 高并发 三部曲 > 面试必备 + 大厂 ...
- Kafka入门教程(一)
转自:https://blog.csdn.net/yuan_xw/article/details/51210954 1 Kafka入门教程 1.1 消息队列(Message Queue) Messag ...
随机推荐
- 将php命令加入cenos环境变量
0.修改/etc/profile文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下两行代码 1.PATH=$PATH:/usr/local/webserver/php/bin:/usr/lo ...
- ubuntu 18.04 通过联网方式安装wine
ubuntu 18.04 通过联网方式安装wine 1.如果是64位机器,先开启允许32位架构程序运行 sudo dpkg --add-architecture i386 2.添加元wine源码安装仓 ...
- [国家集训队]部落战争 最大流 BZOJ2150
题目描述 lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧无人居住.lanzerb把 ...
- Query on a tree 树链剖分 [模板]
You are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, ...
- 1011 A+B 和 C (15 分)
#include <iostream> using namespace std; int main(){ int t; cin >> t; double a, b, c; // ...
- Django 中的中间件
Django 中的中间件 Django 中间件 中间件介绍 前戏 之前在判断登录的时候使用的是装饰器的功能,通过给视图函数加装饰器来增加判断是否登录的功能.但此方法的缺点是必须给每个需要判断登录的视 ...
- JavaScript细节
1.关于全局变量 全局变量在所有的作用域中都是可见变量.当程序小,代码量小的时候,可能还便于维护,而随着程序越来越复杂,代码量也随之越来越大后,过多的全局变量会变的很难处理.因为一个全局变量可以被程序 ...
- BZOJ 3224 Treap
部分还没调到满意的程度,效率比splay略好 #include<bits/stdc++.h> using namespace std; const int maxn = 1e6+11; u ...
- 学习总结——docker
1.docker 配置 docker 安装 docker 修改默认存储位置 docker 命令详解(run篇) docker 命令详解(cp篇) 2.docker 镜像相关资料 docker 把容器c ...
- linux 运维基础之 禁止 ping
ping命令不要小瞧呀,小伙子!!! 听过死亡之ping不? 语法 ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l ...