zookeeper是什么?
zookeeper能够解决什么问题?
- 统一的配置管理,同步更新到所有zk节点,所有app读取到最新的配置
- 发布订阅
- 分布式锁
zookeeper有哪些特点?
- 一致性
保证数据一致性,数据按照顺序分批入库
- 原子性
事务要么成功要么失败,不会局部化
- 单一视图:
客户端连接集群中的任一zk节点,数据都是一致的
- 可靠性:
每次对zk的操作状态都会保存在服务端
- 实时性:
客户端可以读取到zk服务端的最新数据
zoo.cfg 配置
配置项 | 含义 |
---|---|
tickTime |
用于计算的时间单元,比如session超时:N*tickTime ,其他时间都是基于tickTime 的倍数来计算的 |
initLimit |
用于集群,允许从节点连接并同步到master节点的初始化连接时间,以tickTime 的倍数表示 |
syncLimit |
用于集群,master与slave之间发送消息,请求和应答时间长度(心跳间隔) |
dataDir |
存放数据的目录 |
clientPort |
服务端口,默认2181
|
dataLogDir |
存放日志的目录 |
数据模型
- 树形结构
/
---/hadoop
------/hadoop/001
---/hive
------/hive/001
------/hive/002
- 每一个节点称为znode,可以有子节点,也可以有数据
- 每个节点分为临时节点和永久节点,临时节点在客户端断开后消失
- 每个zk节点都有各自的版本号,可以通过命令行来显示节点信息
- 每当节点数据发生变化,该节点的版本号会累加(乐观锁)
- 删除/修改过时节点,版本号不匹配则会报错
- 每个znode存储的数据不宜过大,几k即可
- 节点可以设置权限acl,可以通过权限来限制用户访问