zookeeper 主要应用事务日志和数据快照来实现底层数据一致性;
事务日志
事务日志是记录zookeeper 事务操作的日志文件。以ZXID 为事务日志文件名的后缀,可以快速的定位到查询的事务。采用“磁盘空间预分配”策略,未使用部分用0 补位,避免每次追加数据都需要磁盘IO 为文件开辟新空间(节省磁盘Seek)。每个日志文件大小固定为64M。
数据快照
数据快照记录某一时刻zookeeper 全部内存数据内容,并将其写入到磁盘当中。同样适用ZXID 作为文件名的后缀。没有采用“磁盘空间预分配”策略,因此数据快照一定程度上能反映当前zookeeper 内存中全量数据的大小。
过程
针对客户端每一次的事务操作,zookeeper 都会将他们记录到事务日志中,同时,zookeeper 也会将数据变更应用到内存数据库中。当zookeeper 进行snapCount 次操作之后,会将内存中的全部数据dump 到本地文件(数据快照)。
[数据快照过程]
zookeeper 为了避免所有节点同时进行数据快照,zookeeper 采用了“过半随机”的策略(logCount> snapCount/2 + random)。开始快照时,首先关闭当前日志文件,重新创建一个新的日志文件(切换事务日志文件)。从内存中获取全部数据和校验信息,序列化,写入磁盘文件。zookeeper 会根据当前已提交的最大ZXID 来生成数据快照文件名。
数据恢复
数据恢复时,zookeeper 会加载最近100 个快照文件(校验不通过则继续向前校验),从快照文件中找到ZXID,定位具体事务,然后执行事务日志中的操作。
标签:文件,事务,Zookeeper,快照,zookeeper,一致性,日志,数据 From: https://blog.51cto.com/u_11290086/5804043