一、高级特性
1.watch机制
配置中心、注册中心、分布式锁、leader选举等都会用到watch机制
弊端:记不住到底是针对节点的删除和增加,以及修改数据有效,一次性这种感觉不好
2.get -w/zk-watch:监听是一次性的,只对ZNode节点数据的变化有效果
3.ls[s][-w][-R]path:当前ZNode创建或者删除,以及子节点创建或者删除都会有效果
4.echo stat | ncat localhost 2181 查看zk状态
二、监控zk-server的情况
(1)Four letter words
(2)JMX
(3)AdminServer
三、ACL权限控制
1.Zookeeper supports the following permissions:
2.create、read、write、delete、admin
3.权限设置的格式
4.scheme: id[anyone 所有人]:permission[访问权限:crwda]
5.scheme
world:
'world' anyone :cdrwa[可以更改]
6.auth
表示scheme需要认证登录,也就说对应注册的用户需要拥有权限才可以访问 格式
auth:user:password:permission
7.digest
scheme表示需要密码加密才能访问
digest:username:BASE
8.super
表示超管,用于所有权限,并且能够设置权限
9.序列化和反序列化
10.将java对象 转变成二进制 以便在磁盘保存 或 在网络传输
11.反序列化
12.java json protobuf thrif avro 等
13.性能:速度怎么样 文件大小怎么样
14.jute序列化框架 很早就想把jute换成其他方式,只不过一直没有去做
15.快照数据和事务日志
16.快照数据:某一时刻,内存中的ZNode节点的序列化的结果,全量的序列化到磁盘中中进行保存 snapshot.zxid
17.事务日志文件:记录每一次事务操作的记录,保存在dataLogDir如果目录没有单独配置,就也用dataDir
所以+/version-2/log.zxid形式 某个文件创建了之后,肯定是以增量的方式进行保存
18.文件什么时候创建?
(1).第一次启动zk server的时候 看看会发生什么 5个DataNode的全量数据 不会预分配磁盘空间 22:13:01 时刻的全量数据
第一次启动,有一些内存中已经构建好的默认节点,这些节点会持久化到磁盘中,会保存为snapshot文件名,并且后缀为zxid
snapshot.0 因为此时的zxid是0
(2)比如要进行事务操作,通过客户端连接客户端,算是一次事务操作吗?当然 预分配的磁盘空间64M 如果64M的空间不足4kb
的时候,就会再申请64M的空间,注意还是同一个log文件
事务日志文件
18.这是zk.server不停止的情况下
一次事务操作,会记录一次事务日志在log.1文件中,这个次数如果到达了50000-100000之间的一个随机值
(1)就会触发一次snapShot,快照数据 snapshot.zxid
(2)同时也会创建一个新的log.zxid文件
19.假如重启zk server[前提条件:并且相比上一次重启,zxid有变化]
20.此时也会生成snapshot和log
21.文件什么时候清理?
22.snapshot 10 log 10 会清理吗? 不一定,要看配置
23.总结
23.1针对每一次事务操作[客户端连接服务端、增加节点、删除节点、修改数据 zxidd都会+1],都会将事务操作的日志保存到log.zxid文件中,同时将数据的变化应用到DataTree。当经过了一定次数的
[50000-100000]之间的事务操作之后,就会将DataTree的内存数据持久化全量到snapshot.zxidw文件中[考虑zk server重启的情况]
24.client 发起一个写的命令 什么时候才算写成功了?response响应呢?至少要等 log文件写完
25.事务日志如果要还原数据 是不是要执行 是不是要消耗cpu资源 zxidd都会
26.快照数据 直接通过jvm加载快照数据 快速构建 DataTree