前言
本文作为Pulsar系列的第二篇文章,主要介绍Apache BookKeeper在存储上的设计,主要聚焦于以下两点:
- BookKeeper的读写流程是怎样的,怎么去存储数据
- 多副本存储下BookKeeper如何处理一致性问题
同时强调下BookKeeper本身是个独立的项目,本文是在Pulsar原理探究过程中对BookKeeper存储设计的系统性学习总结。
读写流程设计
BookKeeper采用读写分离的设计
读写流程示意图:
更细化的读写流程图:
写流程设计
1)同步流程
- 将数据写入Journal文件中(即预写日志文件),如果同时有多个数据写入,可进行批量提交(Group commit),刷到Journal磁盘中
- 将数据写入内存中(即memtable/Write Cache,作为写缓存)
- 返回写入成功响应,注意到这里整个流程都是同步的
2)异步流程