当前位置:首页 > 科技  > 软件

白话 Pulsar Bookkeeper 的存储模型

来源: 责编: 时间:2024-01-16 10:16:01 349观看
导读最近我们的 Pulsar 存储有很长一段时间数据一直得不到回收,但消息确实已经是 ACK 了,理论上应该是会被回收的,随着时间流逝不但没回收还一直再涨,最后在没找到原因的情况下就只有一直不停的扩容。最后磁盘是得到了回收,过

最近我们的 Pulsar 存储有很长一段时间数据一直得不到回收,但消息确实已经是 ACK 了,理论上应该是会被回收的,随着时间流逝不但没回收还一直再涨,最后在没找到原因的情况下就只有一直不停的扩容。8yJ28资讯网——每日最新资讯28at.com

最后磁盘是得到了回收,过程先不表,之后再讨论。8yJ28资讯网——每日最新资讯28at.com

为了防止类似的问题再次发生,我们希望可以监控到磁盘维度,能够列出各个日志文件的大小以及创建时间。8yJ28资讯网——每日最新资讯28at.com

这时就需要对 Pulsar 的存储模型有一定的了解,也就有了这篇文章。8yJ28资讯网——每日最新资讯28at.com

图片图片8yJ28资讯网——每日最新资讯28at.com

这里我利用 Pulsar 和 Bookkeeper 的 Admin API 列出了 Broker 和 BK 中 Ledger 分别占用的磁盘空间。8yJ28资讯网——每日最新资讯28at.com

关于这个如何获取和计算的,后续也准备提交给社区。8yJ28资讯网——每日最新资讯28at.com

背景

但和我们实际 kubernetes 中的磁盘占用量依然对不上,所以就想看看在 BK 中实际的存储日志和 Ledger 到底差在哪里。8yJ28资讯网——每日最新资讯28at.com

知道 Ledger 就可以通过 Ledger 的元数据中找到对应的 topic,从而判断哪些 topic 的数据导致统计不能匹配。8yJ28资讯网——每日最新资讯28at.com

Bookkeeper 有提提供一个Admin API 可以返回当前 BK 所使用了哪些日志文件的接口:https://bookkeeper.apache.org/docs/admin/http#endpoint-apiv1bookielist_disk_filefile_typetype8yJ28资讯网——每日最新资讯28at.com

图片图片8yJ28资讯网——每日最新资讯28at.com

从返回的结果可以看出,落到具体的磁盘上只有一个文件名称,是无法知道具体和哪些 Ledger 进行关联的,也就无法知道具体的 topic 了。8yJ28资讯网——每日最新资讯28at.com

此时只能大胆假设,应该每个文件和具体的消息 ID 有一个映射关系,也就是索引。所以需要搞清楚这个索引是如何运行的。8yJ28资讯网——每日最新资讯28at.com

存储模型

图片图片8yJ28资讯网——每日最新资讯28at.com

我查阅了一些网上的文章和源码大概梳理了一个存储流程:8yJ28资讯网——每日最新资讯28at.com

  1. BK 收到写入请求,数据会异步写入到 Journal/Entrylog
  2. Journal 直接顺序写入,并且会快速清除已经写入的数据,所以需要的磁盘空间不多(所以从监控中其实可以看到 Journal 的磁盘占有率是很低的)。
  3. 考虑到会随机读消息,EntryLog 在写入前进行排序,保证落盘的数据中同一个 Ledger 的数据尽量挨在一起,充分利用 PageCache.
  4. 最终数据的索引通过 LedgerId+EntryId 生成索引信息存放到 RockDB 中(Pulsar 的场景使用的是 DbLedgerStorage 实现)。
  5. 读取数据时先从获取索引,然后再从磁盘读取数据。
  6. 利用 Journal 和 EntryLog 实现消息的读写分离。

简单来说 BK 在存储数据的时候会进行双写,Journal 目录用于存放写的数据,对消息顺序没有要求,写完后就可以清除了。8yJ28资讯网——每日最新资讯28at.com

而 Entry 目录主要用于后续消费消息进行读取使用,大部分场景都是顺序读,毕竟我们消费消息的时候很少会回溯,所以需要充分利用磁盘的 PageCache,将顺序的消息尽量的存储在一起。8yJ28资讯网——每日最新资讯28at.com

同一个日志文件中可能会存放多个 Ledger 的消息,这些数据如果不排序直接写入就会导致乱序,而消费时大概率是顺序的,但具体到磁盘的表现就是随机读了,这样读取效率较低。8yJ28资讯网——每日最新资讯28at.com

所以我们使用 Helm 部署 Bookkeeper 的时候需要分别指定 journal 和 ledgers 的目录8yJ28资讯网——每日最新资讯28at.com

volumes:    # use a persistent volume or emptyDir    persistence: true    journal:      name: journal      size: 20Gi      local_storage: false      multiVolumes:        - name: journal0          size: 10Gi          # storageClassName: existent-storage-class          mountPath: /pulsar/data/bookkeeper/journal0        - name: journal1          size: 10Gi          # storageClassName: existent-storage-class          mountPath: /pulsar/data/bookkeeper/journal1    ledgers:      name: ledgers      size: 50Gi      local_storage: false      storageClassName: sc    # storageClass:        # ...    useMultiVolumes: false      multiVolumes:        - name: ledgers0          size: 1000Gi          # storageClassName: existent-storage-class          mountPath: /pulsar/data/bookkeeper/ledgers0        - name: ledgers1          size: 1000Gi          # storageClassName: existent-storage-class          mountPath: /pulsar/data/bookkeeper/ledgers1

图片图片8yJ28资讯网——每日最新资讯28at.com

每次在写入和读取数据的时候都需要通过消息 ID 也就是 ledgerId 和 entryId 来获取索引信息。8yJ28资讯网——每日最新资讯28at.com

也印证了之前索引的猜测。8yJ28资讯网——每日最新资讯28at.com

所以借助于 BK 读写分离的特性,我们还可以单独优化存储。8yJ28资讯网——每日最新资讯28at.com

比如写入 Journal 的磁盘因为是顺序写入,所以即便是普通的 HDD 硬盘速度也很快。8yJ28资讯网——每日最新资讯28at.com

大部分场景下都是读大于写,所以我们可以单独为 Ledger 分配高性能 SSD 磁盘,按需使用。8yJ28资讯网——每日最新资讯28at.com

因为在最底层的日志文件中无法直接通过 ledgerId 得知占用磁盘的大小,所以我们实际的磁盘占用率对不上的问题依然没有得到解决,这个问题我还会持续跟进,有新的进展再继续同步。8yJ28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-62359-0.html白话 Pulsar Bookkeeper 的存储模型

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 零基础入门Python与MongoDB:轻松实现数据管理

下一篇: 快速在你的Vue/React应用中实现SSR(服务端渲染)

标签:
  • 热门焦点
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 三星Galaxy Z Fold/Flip 5国行售价曝光 :最低7499元/12999元起

    据官方此前宣布,三星将于7月26日也就是明天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • 苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
Top