加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

ZooKeeper 数据持久化

发布时间:2021-03-25 13:42:19 所属栏目:动态 来源:互联网
导读:然今天我们的主角是磁盘文件,但是内存还是稍微再提一下下,帮助大家记忆的同时也能有一个比较全面的视角去认知 ZK 整体的数据管理。 ZK 在内存中的存储就是之前故事中有提到的两个账本:小红本和小黄本。如果排除作为回调通知记录的小黄本,那 ZK 的内存中

然今天我们的主角是磁盘文件,但是内存还是稍微再提一下下,帮助大家记忆的同时也能有一个比较全面的视角去认知 ZK 整体的数据管理。

ZK 在内存中的存储就是之前故事中有提到的两个账本:小红本和小黄本。如果排除作为回调通知记录的小黄本,那 ZK 的内存中就是小红本对应的哈希表而已,但是小黄本中的数据依然非常重要,所以需要将两者作为整体一起看待,以及之前我有说过小F(Final)掌管了这两个账本,作为业务处理的最后一个负责人,小S(Sync) 从时间上来说是优先于小F(Final)先处理的,所以 ZK 的设计是优先将数据存入磁盘,再去修改内存中的数据保证尽可能的提升数据的可靠性。下面我们继续了解磁盘文件(还真就提一下下!)

1.2 磁盘文件

ZK 的开发者给 ZK 设计了两种磁盘文件,对应的路径分别是 zoo.cfg 配置中的 dataDir 和 dataLogDir 这两项目录的配置。为了之后的描述清楚,我给这两种磁盘文件起了名字:dataDir 对应 snapshot,dataLogDir 对应 log,log 就是的是小S(Sync)工作中的归档,snapshot 就是的是小S(Sync)工作中的快照。

log 是负责顺序记录每一个写请求到文件,snapshot 则是直接将整个内存对象持久化至文件中。假设我现在 zoo.cfg 的配置是这样:


 

之后的业务数据是如何记录的呢?

每一个写请求都可以分为四个部分:校验和、请求头、请求数据、签名,校验和是通过后面三个字段计算出来的,小S每次收到写请求后都会按照这样的顺序将对应请求的四个字段写入 log 文件,由于不同的业务请求数据不固定,而且数据长度也比较大,这里就不给大家展示具体的值(如果大家想要知道这硬核的存储过程,不妨给我留言,我以后单独做下,尝试逐个字节解释)

然后是 zookeeper.txnLogSizeLimitInKb 这个环境变量配置,默认是 -1,这个配置限制了 log 单个文件大小(单位是 KB),每次小S(Sync)归档的时候(图中右下角粉色部分“是否归档”),将数据统一刷到磁盘后,如果用户手动配置了该参数,就会检查当前 log 文件大小是否超过了该参数大小,如果超过了就会进行 rollLog,相当于下一次的写请求会创建一个新的 log 文件。除此之外,当小S(Sync)每次快照的时候会强制执行一次 rollLog。

2.2 snapshot 文件

snapshot 文件名的格式是这样 snapshot.{zxid} zxid 对应当是创建该文件时的最大 zxid,假设现在创建是最大 zxid 是 0,那目录结构会是这样:

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读