在学习技术的过程中,我发现程序的版本一直在变,每个人的情况也不一样,在参考网上的教程的时候,都或多或少有这样或者那样的问题,在学习和实践之后发现,最好的学习教程就是Apache的官网,最好的学习方式就是动手操作并总结,下面就按照这种学习方式来总结一下如何“真真切切”地掌握ZooKeeper。(原谅我的调皮,使用了真真切切这个词。但我就是这种感觉,很多组件就是学怎么搭建,然后怎么用,别的什么都不懂,感觉特别不真实 _)
打开官网 http://zookeeper.apache.org
Getting Started
从官网的文档开始学起,点击learn about打开documentation,点击Getting Started,如下图所示(如果打开之后跟下图有所不同,就以打开的为主,这里主要是示范如何使用官方的文档)。
1.单机模式(Standalone Operation)
下载zookeeper(下简称zk)之后解压到合适(如果只是测试zk的话,解压到哪里都无所谓,但如果有后续其他组件的学习,对用户和目录的选择都是有影响的)的目录,在conf目录下新建zoo.cfg文件,加入上图中的三个参数,其中要注意的是dataDir指向的目录要事先存在,然后在bin目录下使用zkServer.sh start命令启动zk。
进入命令行客户端,测试命令:
命令行客户端使用完之后,可以使用Java客户端,这就涉及到编程,以及使用命令对应的API了。
打开Programmer's Guide
zk的数据模型
ZooKeeper包含一个分层次的命名空间,很像分布式的文件系统. 唯一的不同是除了包含子节点外,命名空间的每个节点还可以关联数据。就像一个扩展的文件系统一样, 文件也可以是目录.。节点的路径(path)总是规范的斜线分隔的绝对路径;绝没有相对路径.。任意的unicode字符都可以做路径名, 除了一些限制。
znode节点
ZooKeeper树中的每一个节点都被称为znode. Znode维护一个stat数据结构, 包含数据变动的版本值, acl变动等(version numbers for data changes, acl changes)。 stat数据结构还包含时间戳(timestamp)。 版本和时间戳可以允许ZooKeeper校验缓存和协同更新。每次znode的数据改变,版本号都会增加。
Note: 在分布式应用工程学上,单词node 可以指一个通用的主机,服务器, 集群中的一员, 一个客户端进程等。 而在ZooKeeper文档中,znode指数据节点,Server指提供ZooKeeper服务器的机器; quorum peers 指ZooKeeper集群中的服务器; client 指任何使用ZooKeeper的主机或者进程.
Znode是程序访问的主要对象,它们有以下几个特征值得一说。
- 监视Watches
- 数据访问Data Access
- 临时节点Ephemeral Nodes
- 顺序节点Sequence Nodes -- Unique Naming
从单机模式直观的了解zk,使用命令行客户端敲几个命令,大概了解了解。然后配置集群,读API,用eclipse开发JAVA客户端,使用API做几个demo。在弄清了常用的API之后,就找几个具体的场景应用zk做几个实战的小项目。之后就可以反过来理解官网上的这段话:
这样才算是真切的学习了zookeeper。
关于在Windows上用eclipse开发,首先说一个小问题,貌似有不少人苦恼eclipse中文字体大小修改问题,默认的eclipse中文字体很小,和英文字体大小完全不在一个调子上,因为默认的eclipse juno中英文字体是Consolas,字体大小是10,但是大家会发现,如果代码中有中文,那中文的字体会比英文的字体小很多,明显的,默认的eclipse juno中英文字体比中文字体大很多,显得中文很模糊。
解决办法:先调到小5,再调到小四就正常了。
步骤如下:Window –> Preferences –> General –> Appearance –> Colors and Fonts,在“Colors and Fonts”中选择“Basic”–>”Text Font”,然后点“Edit”,把“大小”里面的值编辑成“小五”即可。然后再次调整到你想要的字号就会发现中英文一般大了。