####排它锁
+ 在需要获取排它锁时,通过调用create()接口,创建临时子节点。zk会保证在所有客户端中,只有一个会创建成功,从而获取锁。
+ 其他客户端注册该节点的变更watch监听,在锁释放后重新竞争
+ 获取锁的客户端宕机或者完成后,临时节点删除释放锁

共享锁(读锁)

也是创建临时顺序节点,可以被多个事务持有,根据节点序号确定读写锁的执行顺序(原理是减小锁的范围)

分布式队列(FIFO)

  • 类似创建多个共享读锁,根据创建的临时节点的序号
  • 通过getChindren获取所有子节点,获取队列中的所有元素
  • 如果自己不是序号最小的节点则等待,同时向序号比自己小的最后一个节点注册watcher监听

zk和kafka

  • kafka主题topic,用于建立生产者和消费者之间的订阅关系,生产者发送消息到指定topic下,消费者从这个topic消费(可以按照业务区分)
  • 消息分区partitin,类似3个节点6个分区,(00,01;11,12;21,22)
  • broker是kafka的服务器,用于存储消息
  • 消费者分组group,拥有同一个分组名称,也被称为消费者集群

####加载依赖
```bash

com.github.adyliu
zkclient
2.0

```
####java示例代码
```java
import com.github.zkclient.IZkChildListener;
import com.github.zkclient.IZkDataListener;
import org.springframework.stereotype.Controller;
import com.github.zkclient.ZkClient;

import java.util.List;

@Controller

public class ZkClientController {

public static void main(String[] args) throws Exception {

ZkClient zkClient = new ZkClient("172.16.67.131:2181,172.16.67.131:2182,172.16.67.131:2183");

System.out.println("ZkClient connect begin");

    String basePath = "/zk-test";

    //递归创建节点,永久节点
String newPath = "/zk-test/c1";
zkClient.createPersistent(newPath, true); //获取子节点
List<String> list = zkClient.getChildren(basePath);
System.out.println("count: " + zkClient.countChildren(basePath));
for (String item : list) {
System.out.println(item);
} //子节点变更订阅
zkClient.subscribeChildChanges(basePath, new IZkChildListener() {
@Override
public void handleChildChange(String parentPath, List<String> currentChildren) throws Exception {
System.out.println(parentPath + " changed,child: " + currentChildren);
}
}); System.out.println(zkClient.getChildren(basePath));
Thread.sleep(1000);
if(!zkClient.exists(basePath+"/c2")){
zkClient.createPersistent(basePath + "/c2");
Thread.sleep(1000);
} zkClient.delete(basePath + "/c2");
Thread.sleep(1000); //节点内容变更订阅,创建临时节点
zkClient.createEphemeral(basePath + "/c3", "123".getBytes());
zkClient.subscribeDataChanges(basePath + "/c3", new IZkDataListener() {
@Override
public void handleDataChange(String dataPath, byte[] data) throws Exception {
System.out.println("node " + dataPath + " change to " + new String(data));
} @Override
public void handleDataDeleted(String dataPath) throws Exception {
System.out.println("node " + dataPath + " deleted");
}
}); System.out.println(new String(zkClient.readData(basePath + "/c3")));
zkClient.writeData(basePath+"/c3","456".getBytes());
Thread.sleep(1000);
zkClient.delete(basePath+"/c3");
Thread.sleep(1000);
}

}

####输出结果
```bash
ZkClient connect begin
count: 1
c1
[c1]
/zk-test changed,child: [c1, c2]
/zk-test changed,child: [c1]
/zk-test changed,child: [c3, c1]
123
node /zk-test/c3 change to 456
node /zk-test/c3 deleted
/zk-test changed,child: [c1]

zookpeer应用和zkclient实践的更多相关文章

  1. 分布式学习系列【dubbo入门实践】

    分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...

  2. 1、ZooKeeper 基本概念、使用方法、实践场景

    ZooKeeper 基本概念 ZooKeeper 是面向分布式应用的协调服务,其实现了树形结构的数据模型(与文件系统类似),并且提供了简洁的编程原语.ZooKeeper 能够作为基础,用于构建更高层级 ...

  3. 分布式锁实践(二)-ZooKeeper实现总结

    写在最前面 前几周写了篇 利用Redis实现分布式锁 ,今天简单总结下ZooKeeper实现分布式锁的过程.其实生产上我只用过Redis或者数据库的方式,之前还真没了解过ZooKeeper怎么实现分布 ...

  4. 我读《从Paxos到zookeeper分布式一致性原理与实践》

    从年后拿到这本书开始阅读,到准备系统分析师考试之前,终于读完了一遍,对Zookeeper有了一个全面的认识,整本书从理论到应用再到细节的阐述,内容安排从逻辑性和实用性上都是很优秀的,对全面认识Zook ...

  5. 4、Dubbo-工程实践

    4.实践测试 4.1).提出需求 某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址: 我们现在 需要创建两个服务模块进行测试  测试预期结果: 订单服务web模块在A服务器,用户服务模块在 ...

  6. ZooKeeper分布式锁简单实践

    ZooKeeper分布式锁简单实践 在分布式解决方案中,Zookeeper是一个分布式协调工具.当多个JVM客户端,同时在ZooKeeper上创建相同的一个临时节点,因为临时节点路径是保证唯一,只要谁 ...

  7. 实践部署与使用apache kafka框架技术博文资料汇总

    前一篇Kafka框架设计来自英文原文(Kafka Architecture Design)的翻译及整理文章,非常有借鉴性,本文是从一个企业使用Kafka框架的角度来记录及整理的Kafka框架的技术资料 ...

  8. 《zookeeper原理与实践》笔记

    第1章 分布式架构 1.1 分布式 分布式特点:分布性.对等性.并发性.缺乏全局时钟.故障总是会发生. 分布式问题:通讯异常.网络分区(脑裂).三态.节点故障.   1.2 ACID到CAP/BASE ...

  9. webp图片实践之路

    最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中.传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显.估计在不久的将来,webp会成为标配. ...

随机推荐

  1. [洛谷P2750] [USACO5.5]贰五语言Two Five

    洛谷题目链接:[USACO5.5]贰五语言Two Five 题目描述 有一种奇怪的语言叫做"贰五语言".它的每个单词都由A-Y这25个字母各一个组成.但是,并不是任何一种排列都是一 ...

  2. 20155117王震宇 2006-2007-2 《Java程序设计》第5周学习总结

    教材学习内容总结 try & catch java中的错误会被打包成对象,可以尝试(try)捕捉(catch)代表错误的对象后做一些处理.如果发生错误,会跳到catch的区块并执行. 异常结构 ...

  3. python初步学习-面向对象之类(一)

    python 面向对象 python 从设计之初就已经是一门面向对象的语言,正因为如此,在python中创建一个类和对象是很容易的. 对象对象奇数简介 类(Class): 用于描述具有相同的属性和方法 ...

  4. 25、Python垃圾回收机制?

    Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾.在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的 ...

  5. Automation Testing - Best Practice(书写规范)

    Coding Standards Coding Standards are suggestions that will help us to write automation Scripts code ...

  6. django框架<二>

    django框架:   Models 1.基本创建 Django提供了一个抽象层("Model")的构建和管理Web应用程序的数据. Django使用一种新的方式,即:关系对象映射 ...

  7. 概述sysfs文件系统【转】

    转自:http://blog.csdn.net/npy_lp/article/details/78933292 内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 sys ...

  8. 细说show slave status参数详解(最全)【转】

    在搭建好mysql主从之后,我们一般在从库上通过命令 show slave status\G 来查看主从的状态,会有很多的参数,接下来笔者就带大家好好的了解这些参数 root@localhost (n ...

  9. tomcat+java的web程序持续占cpu高问题调试【转】

    转自 tomcat+java的web程序持续占cpu问题调试 - 像风一样的自由 - CSDN博客http://blog.csdn.net/five3/article/details/28416771 ...

  10. [转载]锁无关的(Lock-Free)数据结构

    锁无关的(Lock-Free)数据结构 在避免死锁的同时确保线程继续 Andrei Alexandrescu 刘未鹏 译 Andrei Alexandrescu是华盛顿大学计算机科学系的在读研究生,也 ...