V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shuangchengsun
V2EX  ›  程序员

rocketMQ 的高性能疑问

  •  
  •   shuangchengsun · 2021-01-17 18:04:10 +08:00 · 2210 次点击
    这是一个创建于 1407 天前的主题,其中的信息可能已经有所发展或是发生改变。

    都说 RocketMQ 在 Topic 和分区多的场景下性能比卡夫卡要强,大家给出的原因是 commitLog 的组织方式是最核心的因素,rocketMQ 所有的消息都会顺序写入 commitLog,磁盘 IO 一直是顺序写入,而卡夫卡每个分区都有自己的消息持久化文件,分区多了之后相当于随机写。


    但是我最近在看源码的时候发现,rocketmq 会为每个 consumerQueue 创建一个持久化文件用于保存消费进度,那么问题来了:在 Topic 多的时候 consumerQueue 也会随之增多,那么消费进度的持久化文件也会增多,不也相当于随机写么?为什么会和卡夫卡结果相反


    再看看官网上关于 rocketmq 的描述,Topic 过多并不会太拖累 RocketMQ 的性能,想问问各位大佬我的理解是哪儿出了问题。

    3 条回复    2021-01-18 14:49:26 +08:00
    billlee
        1
    billlee  
       2021-01-17 21:16:45 +08:00
    没用过 rocketmq, 但消费进度不是每消费一条都写一次的吧,影响比较小
    taibai233
        2
    taibai233  
       2021-01-18 10:37:46 +08:00
    虽然没有看过他的实现,不过这里给你纠正一点:
    现代的这些存储系统的持久化实现,为了实现高效,都是不直接落盘的。像这里虽然会有多个持久化文件,但也不是写一条落一条,而是会先写缓存,缓存满了,再批量写。这里多个 consumerQueue 可能就对应多个内存缓存块。他是不是会有 topic 多内存消耗多这种情况。
    真正写一条落一条的只有 commitLog 这东西,这也是个主要受磁盘性能影响的东西。
    h3nng
        3
    h3nng  
       2021-01-18 14:49:26 +08:00 via iPhone
    queue 只是索引记录,数据量很小
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   901 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:02 · PVG 06:02 · LAX 14:02 · JFK 17:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.