您的位置:首页 > 其它

分布式协调服务Zookeeper

2017-08-02 15:02 330 查看
一.ZooKeeper概述

1.zookeeper是一个为用户的分布式应用程序提供协调的服务。

·是为别的分布式程序服务的

·本身也是一个分布式程序(只要半数以上节点存储,就能正常提供服务)

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

3.Hadoop生态系统中许多框架使用了Zookeeper,例如:HDFS HA、HBase、Kafka、Spark

二.ZooKeeper架构

1.核心组件

·Server:数目一般为奇数

·Leader

·Follower

·Client

三.ZooKeeper数据结构



层次化的目录结构

每个节点在ZK中叫做znode

znode可以包含数据和子节点(EPHEMERAL类型的节点不能有子节点)

znode中的数据可以有多个版本,可以通过版本查询数据

znode有两种类型

短暂的:ephemeral

持久的:persistent

znode的类型在创建时确定后就不能修改

四.创建、删除zk节点

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;

public class ZkTest {
public static void main(String[] args) throws Exception {
// 创建一个与服务器的连接
ZooKeeper zk = new ZooKeeper("node3", 3000, new Watcher() {
// 监控所有被触发的事件
public void process(WatchedEvent event) {
System.out.println("已经触发了" + event.getType() + "事件" + event.getPath());
}
});
// 创建一个目录节点
zk.create("/testPath", "testData".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
System.out.println(new String(zk.getData("/testPath", false, null)));

// 创建一个子目录节点
zk.create("/testPath/testChildPathOne", "testChildDataOne".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(new String(zk.getData("/testPath/testChildPathOne", true, null)));

// 取出子目录节点列表
System.out.println(zk.getChildren("/testPath", true));

// 修改子目录节点数据
zk.setData("/testRootPath/testChildPathOne", "modifyChildDataOne".getBytes(), -1);
System.out.println(new String(zk.getData("/testPath/testChildPathOne", false, null)));
System.out.println("目录节点状态:[" + zk.exists("/testPath", true) + "]");

// 创建另外一个子目录节点
zk.create("/testPath/testChildPathTwo", "testChildDataTwo".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(new String(zk.getData("/testPath/testChildPathTwo", false, null)));

// 删除子目录节点
zk.delete("/testPath/testChildPathTwo", -1);
zk.delete("/testPath/testChildPathOne", -1);

// 删除父目录节点
zk.delete("/testPath", -1);
// 关闭连接
zk.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  zookeeper