Zookeeper系列(十九)Zookeeper原理解析之数据存储之FileTxnLog& FileTxnSnapLog工具类
来源:互联网 发布:生意专家库存软件 编辑:程序博客网 时间:2024/06/05 04:38
FileTxnLog类用来操作事务记录文件下面我们来看看这个类主要实现方法
4.1)append方法: 用来向文件尾部添加一条记录
4.1.1)判断当前输入流logStream是否已清空(在同步处理器SyncRequestProcessor中据一定算法得出一个count,记录大于count就要rollLog,开启一个新的文件,算法是: 100000/2 + random.nextInt(100000/2), 这个十万是一个默认值可配置),清空开启一个新的文件写入
4.1.2)padFile()判断是否要扩充文件容量预分配buffer,当buffer容量小于等于4k的时候预分配,每次扩充预分配64k容量
4.1.3)数据序列化,写入输入流缓存
4.2)read(zxid): 读取事务日志, 这个方法在服务当机恢复的时候,用来遍历事务日志来恢复数据。Zxid是事物日志号递增生成,在FileTxnLog中会将大于zxid的所有日志文件组合成一个FileTxnIterator用来遍历从zxid开始的所有日志
4.2.1)FileTxnIterator的构造器中调用init方法,init方法中过滤出所有需要读的日志文件,并利用goToNextLog()方法打开第一个日志日志文件的输入流
4.2.2)FileTxnIterator的next方法用来从日志文件中读取一条记录,校验并反序列化出来,读取成功返回true,如果读到了文件末尾调goToNextLog()读下一个文件,以此递归直到最后
4.2.3)FileTxnIterator的getTxn()方法,返回next()方法中读取的记录
4.3)commit()方法,将流中数据刷到硬盘SyncRequestProcessor中任务会定时调用异步刷盘
4.4)truncate(zxid)方法,用来删除日志,主要是在恢复数据的时候,利用leader的最后有效zxid,来删除learner的无效多余的事务记录。类似于数据库中的truncate操作概念,它并不是一条一条删除记录,大于zxid的文件直接将文件删除掉,zxid所在文件直接修改文件的长度,将文件长度设置到zxid所在的位置
4.5)序列化事务记录
4.6)反序列化事务记录
5FileTxnSnapLog
这是一个工具类主要用来操作TxnLog和Snapshot文件,我们主要关注一下restore方法
- Zookeeper系列(十九)Zookeeper原理解析之数据存储之FileTxnLog& FileTxnSnapLog工具类
- 4.zookeeper原理解析-数据存储之FileTxnLog& FileTxnSnapLog工具
- Zookeeper系列(十五)Zookeeper原理解析之数据存储之Zookeeper内存结构
- 1.zookeeper原理解析-数据存储之Zookeeper内存结构(zookeeper系列文章)
- Zookeeper系列(十七)Zookeeper原理解析之数据存储之Snapshot
- Zookeeper系列(十八)Zookeeper原理解析之数据存储之TxnLog事务日志
- Zookeeper系列(二十)Zookeeper原理解析之数据存储之ZKDatabase
- Zookeeper系列(二十一)Zookeeper原理解析之数据存储小结
- 1.zookeeper原理解析-数据存储之Zookeeper内存结构
- 【Zookeeper】源码分析之持久化--FileTxnSnapLog
- 2.zookeeper原理解析-数据存储之Snapshot
- 3.zookeeper原理解析-数据存储之TxnLog事务日志
- 5.zookeeper原理解析-数据存储之ZKDatabase
- Zookeeper系列(十六)Zookeeper原理解析之选举之选举流程
- ZooKeeper系列之七:ZooKeeper命令行工具
- ZooKeeper系列之七:ZooKeeper命令行工具
- ZooKeeper系列之七:ZooKeeper命令行工具
- ZooKeeper系列之七:ZooKeeper命令行工具
- hadoop2.7.2学习笔记06-CLI MiniCluster
- 程序员面试金典——无缓存交换___
- RocketMQ集群压测实战二:压测过程
- js url传值java 页面url传值中文编码&解码
- wifi详解(五)
- Zookeeper系列(十九)Zookeeper原理解析之数据存储之FileTxnLog& FileTxnSnapLog工具类
- SOAP协议详解
- Android之Apk版本更新
- wampserver集成环境安装,自定义根目录以及多站点配置
- Leetcode学习(43)—— Relative Ranks
- 指针地址作为参数传递
- Mac下ssh连接服务器
- fir.im 持续集成技术实践
- 【计算机视觉】【神经网络与深度学习】YOLO v2 detection训练自己的数据