Apache Pulsar的Bookeeper架构和各种概念

1. Bookeeper的特点和使用场景

特点:

  1. 极低的延迟(小于5毫秒)读写entry流
  2. 能够持久、一致、容错地存储数据
  3. 在写数据时,能够进行流式追尾传输
  4. 有效地存储、访问历史数据与实时数据

能够在单个集群中或多个集群间提供跨机器复制

2. entry、ledger、stream概念

Bookkeeper中比较核心的元素: 记录(entry)、日志段(ledger)、日志流stream

关系是:多个记录形成一个日志段,一个或多个日志段形成日志流,日志流是无界、无限的有序数据流

ledger概念

entry:记录是BookKeeper中最小的I/O单元,也被称作地址单元。每个记录都有一个序列号,是递增的。客户端可以从指定位置读取记录,也可以追尾读取。客户端可以读取当条,也可以批量读取

Ledger:当客户端write时异常关闭,正在写入此ledger的记录会丢失。Ledger一旦被关闭就不可变,就不可向该Ledger追加记录

Stream:当Stream中的一个ledger达到一定时间或空间,就会产生一个新的ledger,多个ledger可以分布在不同的Bookeeper节点。可以配置保留ledger的时间,超过时间就删除ledger
Stream概念

3. 元数据储存

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值