1.Zookeeper是什么?

  • Zookeeper是apache基金会的顶级项目中的一员。

  • 它是一个中间件,提供协调服务,是一个zoo keeper 即动物园管理者,协调“动物园”(Hadoop生态圈等)的各个“动物”(大象(Hadoop),蜜蜂(Hive))等。(据说动物管理员是当时雅虎的一位首席科学家RaghuRamakrishnan脱口而出的玩笑话)

  • 它主要用于分布式系统,为大数据服务,常见的功能如Hadoop的HA机制

  • 支持Java和C两种语言API

2.Zookeeper的特点

  • 一致性:这里的一致性指数据一致性,数据按照顺序入库
  • 原子性:和数据库的原子性一样,事务要么成功,否则失败
  • 单一视图:客户端连接到集群的任一节点,访问的数据都是一致
  • 可靠性:每次对zk的操作状态都会保存到服务端
  • 实时性:客户端可以读取到zk服务端最新的数据

3.Zookeeper的目录结构

Zookeeper的简要说明

  • bin 主要是运行命令
  • conf Zookeeper的配置文件,主要是修改zoo.cfg进行配置
  • contrib 附带的额外功能
  • docs Zookeeper的文档
  • lib Zookeeper的依赖jar包
  • dist-maven Maven 编译后的目录,里面是一些jar包和相关pom等文件
  • recipes Zookeeper提供的官方demo
  • src Zookeeper源码

3.Zookeeper的配置

Zookeeper的配置都是在conf文件夹下的zoo.cfg中配置的,开始安装解压后文件名是zoo_sample.cfg 要复制一份并把文件名命名成zoo.cfg即可
Zookeeper的简要说明

  • tickTime 用于计算的时间单元 比如session超市是N*tickTime
  • initLimit 用于集群,允许从节点连接并同步到主节点的初始化连接时间,还是以tickTime的倍数
  • syncLimit 用于集群,主节点与从节点之间发送消息,请求应答的时间长度,即心跳机制(客户端向服务端发送ping包请求)
  • dataDir,必须要配置,而且路径不能是默认的,否则,机器重启之后/tmp可能会丢失,导致Zookeeper启动失败,此外此文件夹还是保存快照的路径
  • dataLogDir 日志目录,不配置就和dataDir同一目录
  • clientPort 连接服务端的接口,默认是2181

4. Zookeeper的数据模型

  • 可以是一个树形结构,类似于前端的trss.js,我们在开发Zookeeper的Manager的界面时,也是使用tree.js进行展示

Zookeeper的简要说明

  • Zookeeper的数据模型和linux1的文件结构差不多,每个文件夹被称为一个节点即znode,一个节点可以有多个子节点,节点都可以有数据
  • 每个节点分为永久节点和临时节点,临时节点当客户端关闭,心跳结束后,临时节点则自动删除
  • 每个Zookeeper节点都有各自的版本号,可以通过命令行显示节点信息
  • 当节点数据发生改变时,版本号则自动累加(乐观锁)
  • 删除修改过时的节点,版本号不匹配则会报错
  • 每个Zookeeper节点存储数据不宜过大,几k即可
  • Zookeeper可以通过acl命令设置权限,以此限制用户的访问

5.Zookeeper的特点

  • 主从机制,主节点挂之后,从节点接手工作,保证Zookeeper的高可用
  • 统一配置文件管理 ,即只需要部署一台服务器,则可以把相同的配置文件同步到集群中的其他服务器中,在云计算使用比较多,如修改了redis统一配置
  • 发布订阅,类似于MQ,Kafka,dubbo 发布者把数据发布到znode,订阅者在znode读取数据
  • 提供分布式锁
  • 集群管理,保证数据的强一致性

相关文章: