目录
1. Bookeeper的特点和使用场景
- 1. Bookeeper的特点和使用场景
- 2. entry、ledger、stream概念
- 3. 元数据储存
- 4. 整体架构
特点:
- 极低的延迟(小于5毫秒)读写entry流
- 能够持久、一致、容错地存储数据
- 在写数据时,能够进行流式追尾传输
- 有效地存储、访问历史数据与实时数据
能够在单个集群中或多个集群间提供跨机器复制
2. entry、ledger、stream概念Bookkeeper中比较核心的元素: 记录(entry)、日志段(ledger)、日志流stream
关系是:多个记录形成一个日志段,一个或多个日志段形成日志流,日志流是无界、无限的有序数据流
entry:记录是BookKeeper中最小的I/O单元,也被称作地址单元。每个记录都有一个序列号,是递增的。客户端可以从指定位置读取记录,也可以追尾读取。客户端可以读取当条,也可以批量读取
Ledger:当客户端write时异常关闭,正在写入此ledger的记录会丢失。Ledger一旦被关闭就不可变,就不可向该Ledger追加记录
Stream:当Stream中的一个ledger达到一定时间或空间,就会产生一个新的ledger,多个ledger可以分布在不同的Bookeeper节点。可以配置保留ledger的时间,超过时间就删除ledger
BookKeeper利用Zookeeper来存储Ledger ID与可用bookie的相关元数据。还利用Zookeeper进行一些协调、配置管理任务等
4. 整体架构- 一个Bookie会将数据先以append方式写入journal(一种WAL预写日志)。当一个journal文件写满后,会开启一个新的journal继续写入
- 将一个写入完成的journal的数据放到write cache中
- 在write cache中,会对entry进行分组排序。例如对于Pulsar来说,按topic的partition进行分组,然后按append的顺序对ledger进行排序
- 当cache达到一定量或一定时间,将write cache刷新到磁盘。一个组会产生两个文件,一个是用来记录entry id位置的ledger index,另一个是用来储存数据的entry log
- 读取时,先读取ledger index,再读取需要的ledger log