我为什么学习zookeeper

会话

3.2.0版本后支持一个“chroot”后缀,例如:“127.0.0.1:2181/app/a”,它的作用在于使之后的所有路径都变成基于此的相对路径。

zookeeper的会话使用64位的整数来标识。连接创建好时,这个会话ID会连同服务器创建的一个密码一同发给客户端。如果客户端断线,在重新连接到zookeeper的时候,客户端会给出密码和会话ID;所有服务器都可以验证它们的对应情况。这样,便实现了安全。

两个概念比较重要:会话超时时间和tick时间。tick时间一般设置为2000ms,会话超时时间可设为它的2倍到20倍。zookeeper的客户端API会帮助你管理超时重连,而且这个库的设计很高明,“自适应地处理了惊群等情况”。

监视器

zookeeper客户端可以在znode上设置监视器。该znode如果有变化,则对应的监视器被触发,客户端会收到消息,然后这个监视器被移除。三种读操作:getData(), getChildren(), exists(),它们可以可选地在znode上注册监视器——作为本身读数据、读子znode列表、检查存在性的副作用。 监视器有三个要点:

1)只触发一次。

2)向监视者发送。zookeeper保证当znode改变时,客户端不会看到这个改变,直到它设置在这个znode上的监视器被触发,且这个事件已抵达该客户端。这样,不同的客户端在同一时刻可能看到znode的不同形态。举个例子,client_a在znode上设置了监视器A,然后znode更新,但是这个事件被丢失在了网络中,那么client_a再次请求改znode时,将得到最原始的返回结果。这时如果另一个client_b也请求该znode的状态,结果便不同了。另外,如果同一客户端多次向同一znode注册watcher,那么zookeeper保证先注册的watcher会先被递达。

3)getData和exists两个操作设置的是DataWatch,getChildren设置的是ChildrenWatch。例如,一个znode被创建,将会触发它自己的DataWatch,以及其父节点的ChildrenWatch。

监视器只在会话连接到的服务器本地进行维护,这使得监视器本身的设计是非常轻量级的。当客户端连接到新的服务器上时,监视器会被任何会话事件触发(PS,这句是否是说,有些监视器是设置到session上的?)。当客户端重连时,所有之前设置的触发器都会被重设,并视情况被触发。注意,只有1种情况监视器会丢:在客户端断线的时候,它监听的znode被创建出来,但是又删掉了!

watch的语义:created event,deleted event,changed event,;以及child event。

watch可以通过客户端调用removeWathes来移除;当然,如果已无法连接到任何server,客户端也可以设置local flag为真,来单方面消除连接。Java绑定

    Java API通过两个包提供功能:org.apache.zookeeper和它的data子包。前者下面的Zookeeper类抽象了一个zookeeper连接,及其连接到的zookeeper集群的视图。它有两个构造函数,其区别在于其中一个额外地需要session id和password两个参数。这样,便可以支持进程失败后从磁盘中恢复会话了。Zookeeper类对象持有两个线程:一个IO线程和一个Event线程。所有IO操作都在IO线程中通过NIO进行,监听器被触发后的回调函数则在Event线程中执行。注意,同步的getData()等数据读写操作也在IO线程中完成。

编程例子

https://github.com/hicqu/zookeeper-learn

时间: 2024-09-29 02:53:19

我为什么学习zookeeper的相关文章

zookeeper 学习 zookeeper下载部署

下载 http://mirror.bit.edu.cn/apache/zookeeper/ 校验 解压后得到zookeeper-3.4.10.jar,使用md5sum zookeeper-3.4.10.jar 得到 450dbad05d829607bc45b9ccad789890  zookeeper-3.4.10.jar 与zookeeper-3.4.10.jar.md5中的内容比较 伪集群部署 以server0为例 [email protected]:~/server0/zookeeper/

学习 - Zookeeper

ZooKeeper 简介: ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等 ZooKeeper代码版本中,提供了分布式独享锁.选举.队列的接口,代码在zookeeper-3.4.3\src\recipes 1 Zookeeper的基本概念 1.1 角色 Zookeeper中的角色主要有以下三类,如下表所示: 系统模型如图所示: 1.2 设计目的 1. 最终一致性:client不论连接到哪个Se

zookeeper学习第一天

Zookeeper用途场景: 1:zookeeper分布式服务框架:是Apache Hadoop的一个子项目,主要是用来解决分布式应用场景中经常遇到的一些数据管理问题. 2:如:集群管理.统一命名服务.分布式配置管理.分布式消息队列.分布式锁.分布式通知协调等. 3:越来越多的分布式计算开始强依赖ZK,比如Storm.Hbase. 4:Zookeeper对分布式开发带来很多便利,用ZK的独有特性巧妙的解决了很多难题:很多分布式技术用到Zookeeper或多或少特性,尤其是新生代分布式技术几乎都会

zookeeper学习:使用命令行连接到服务器

其实学习zookeeper挺简单的,找一本书或者网上的资源,按照其中的例子做一遍就大致了解了.之前是自己学习的方法有问题. 1. 会启动单机版的服务器,并使用客户端连接,然后进行节点的各种操作 2. 会启动zookeeper集群,并用客户端连接,会看懂对应的启动和连接日志 3. zookeeper客户端的会话周期知道一点 4. 利用zookeeper集群在命令行工具下实现一个主从模式 5. 知道永久节点和临时节点的区别 6. zookeeper中并没有直接实现锁,而是提供了能够实现锁的原语.了解

zookeeper能做什么?

Zookeeper是Hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用越来越多.今天我想谈谈zookeeper,本文不谈如何使用zookeeper,而是zookeeper到底有哪些实际的运用,哪些类型的应用能发挥zookeeper的优势,最后谈谈zookeeper对分布式网站架构能产生怎样的作用. Zookeeper是针对大型分布式系统的高可靠的协调系统.由这个定义我们知道zookeeper是个协调系统,作用的对象是分布式系统.

【分布式】Zookeeper会话

一.前言 前面分析了Zookeeper客户端的细节,接着继续学习Zookeeper中的一个非常重要的概念:会话. 二.会话 客户端与服务端之间任何交互操作都与会话息息相关,如临时节点的生命周期.客户端请求的顺序执行.Watcher通知机制等.Zookeeper的连接与会话就是客户端通过实例化Zookeeper对象来实现客户端与服务端创建并保持TCP连接的过程. 2.1 会话状态 在Zookeeper客户端与服务端成功完成连接创建后,就创建了一个会话,Zookeeper会话在整个运行期间的生命周期

Zookeeper linux下使用

安装 1.  安装包下载到window系统,通过pscp命令,拷贝到linux下.Pscp使用请参考下面文章:http://www.linuxidc.com/Linux/2012-05/60966.htm 2.  开始—运行—cmd进入命令行窗口,输入命令: pscp F:\学习\zookeeper\zookeeper-3.4.6.tar.gz [email protected]:/home/lb Ctrl+alt+f3进入虚拟机命令窗口,cd  /home/lb查看到zookeeper-3.4

zookeeper技术浅析

Zookeeper是hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用越来越多.今天我想谈谈zookeeper,本文不谈如何使用zookeeper,而是zookeeper到底有哪些实际的运用,哪些类型的应用能发挥zookeeper的优势,最后谈谈zookeeper对分布式网站架构能产生怎样的作用. Zookeeper是针对大型分布式系统的高可靠的协调系统.由这个定义我们知道zookeeper是个协调系统,作用的对象是分布式系统.

如何远程调试zookeeper集群

我们在阅读一些源码的时候,如果能调试源代码将会大大的提高我们的阅读效率.最近在学习zookeeper源码,分享下如何调试zookeeper集群. zookeeper代码,调试环境搭建 1.下载zookeeper3.4.9拷贝3份 为 node0, node1, node22.修改zoo.cfg添加server.1=127.0.0.1:3330:4440server.2=127.0.0.1:3331:4441server.3=127.0.0.1:3332:4442修改dataDir=/tmp/zo