zookeeper原理篇-Zookeeper的数据存储与恢复原理,java面试通关手册

而比较值得注意的是这些文件的大小,都是一样的67108880KB,这大小换算成MB刚好是64MB大小,除此之外,可以看到log文件的命名都是log.作为前缀,后面的名字都是十六进制的数字,那么这个是什么呢?其实这个是使用了一个ZXID作为后缀,而选择的则是当前日志中的第一条事务的ZXID,而ZXID我们前面也了解过,是由两个部分组合而成,高32位代表当前Leader的选举周期–epoch的大小,而低32位则是该周期内的操作序列号,因此我们可以根据事务日志的名称快速的解析读取出来对应的epoch信息和先后顺序。

我们随便选择一个日志文件打开,发现里面的内容无法阅读,都是序列化后的事务日志:

zookeeper原理篇-Zookeeper的数据存储与恢复原理,java面试通关手册_第1张图片

可以看到里面的内容只能隐约的看到一些节点的路径以外,其他的几乎分辨不出来了,而在zookeeper中提供了一个格式化日志的命令–org.apache.zookeeper.Server.LogFormatter,使用方式只需要在目录下输入:

  1. JavaLogFormatter日志文件

我们随便找一个日志文件输入命令,看看格式化后的内容:

第一行日志:

  1. ZooKeeperTransactionalLog F ile with dbid 0 txnlog format version 2

可以看到这句日志是日志记录的开始,告诉我们日志的当前版本号是2,以及当前的dbid是0,接着我们看下一行日志:

  1. 01:07:41 session 0x144699552020000 cxid 0x0 zxid 0x300000002 createSession 30000

而第二行从左到右分别记录了事务的发生时间、当前事务的会话id、客户端序列号cxid、事务id–zxid以及当前触发事务的动作是创建操作,接着我们来看第三行日志的内容:

  1. 01:08:40 session 0x144699552020000 cxid 0x2 zxid 0x300000003 create

  2. /test_log,#7631,v{s{31,s{/w orld,'anyone}}},F,2

这一行日志我们看到,不仅有和第二行记录一样的以外,还记录了节点的路径,节点的数据内容,这里需要注意的是这里记录的方式的#+值的ASSCII的码值,节点的ACL信息以及是

你可能感兴趣的:(程序员,面试,java,后端)