Post

Pulsar系统架构和原理

一、Pulsar

1.1、基本概念

Broker

  • Http服务暴露REST API,提供adminer、producer、consumer相关api

  • 调度器,包含异步TCP服务,通过自定义二进制协议进行数据传输

  • 纯计算,无状态

1.2、系统架构

image

消息写入流程

loading-ag-325

  • 1、Productor通过SDK发送消息到Broker

  • 2、Broker把消息划分到某个topic-partition-xx,topic-partition-xx对应一个系列Legder

  • 3、通过Bookkeeper Client写入Legder。(Legder的Entry写入流程见Bookkeeper IO模型)

消息读取流程

loading-ag-324

  • 多级缓存

  • 一次IO,多读,并设置到缓存

  • 目的:减少IO,提高读取性能

二、Bookkeeper

2.1、基本概念

Entry

  • 代表一个消息,一个记录(record)
  • 存储在Ledger中的最小单位

Ledger(pulsar中的segment)

img.png

  • 类似于写文件系统,写文件时先打开一个文件描述符;如果文件不存在,则新建一个文件

    1
    2
    3
    
    write写数据时,先打开一个Ledger
      
    openLedger(组内Bookie节点数目、并发写Bookie数目、至少写成功Bookie数目)
    
  • 一个Ledger包含多个Entry,append-only

Stream

img.png

  • 是无界、无限的数据记录系列

  • 一个Stream由多个Ledger组成,每个Ledger基于时间或空间滚动策略循环

  • 与Ledger不同,Ledger只能运行一次,Stream可以运行多次

Bookie

  • BookerKeeper中的存储服务器
  • 负责Entry的读、写、存、多副本复制
  • 单个bookie上存储ledger段,而不是整个ledger
  • entries(ledger段)写入bookies一个可用分组,而不是所有bookies

2.2、系统架构

img.png

2.3、数据读写

读写架构:

img.png

IO模型

loading-ag-1218

写流程:

cbezlbx9l7.png

  • 1、entries到达Journal,以append方式实时刷盘到Journal盘

  • 2、异步发送entries到memory table进行数据整理,按topic排序划分,方便读操作

  • 3、index disk保存entry索引,logger disk保存entry原数据

读流程:

1、读缓存;从memory table中读取

2、读磁盘;从index disk和logger disk中读取

写高可用、低延时

  • 高可用: 并发写入x个台bookie,且有y个台bookie返回成功才ack。以roundrobin的方式写入bookie,充分利用每台bookie资源

    1
    2
    3
    
    故障恢复:当bookie组中的的某个节点发生故障,会触发以下动作
    1、记录entry id,封装故障节点数据
    2、关闭当前ledger,重新打开一个新的ledger,新ledger的bookie组不包含故障节点
    
  • 低延时:append-only机制

读高可用

  • 写阶段实现了副本冗余

  • 并行读;同时向多个bookies发起读请求

  • 自动故障转移;若某个bookies读取失败,自动尝试其他副本

读写分离

  • 见IO模型

强一致性

  • 写阶段:Quorum机制,多数bookies写入成功才ack

  • 读阶段:依赖版本号LAC(Last Add Confirmed)机制,客户端维护一个LAC值,表示当前最新的可见Entry ID,客户端只能读取到LAC之前的数据

  • ZooKKeeper元数据管理:自动副本修复,副本对比一致性

三、Pulsar与Bookkeeper

image

四、线上问题和解决

pulsar-go内存高,

  • 原因:为复用内存,每个partition持有一个大字节buf作为压测优化。直达Producer关闭,buf才释放
  • 解决:协程扫描partition的buf活跃程度,超时则释放buf

五、参考

  • 技术总览:https://juejin.cn/post/7213983057899946040

  • pulsar VS bookkeeper:https://www.51cto.com/article/670179.html

  • bookkeeper: https://matt33.com/2019/01/28/bk-store-realize/

  • 5张图带你了解Pulsar的存储引擎BookKeeper:https://developer.aliyun.com/article/1110763

This post is licensed under CC BY 4.0 by the author.