您当前的位置: 首页 >  ar

Bulut0907

暂无认证

  • 1浏览

    0关注

    346博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Apache Pulsar的Bookeeper架构和各种概念

Bulut0907 发布时间:2022-05-11 16:48:09 ,浏览量:1

目录
  • 1. Bookeeper的特点和使用场景
  • 2. entry、ledger、stream概念
  • 3. 元数据储存
  • 4. 整体架构

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
关注
打赏
1664501120
查看更多评论
立即登录/注册

微信扫码登录

0.0362s