RocketMQ是参考kafka进行实现的为什么rocketMQ与kafka性能差距很大呢?

kafka 的底层数据储存实现

  • kafka 的数据是进行分区储存的,每一个分区对应单独的文件夹(数据,索引都是单独的),这样在并发(多生产者与消费者)读写的情况下性能更好(特别是读)
  • 可以减少并发读写的冲突问题
  • 在读的情况下,可以更好的使用批量读取的方式获取数据,提升读取性能

rocketMQ 的底层数据储存实现

  • rocketMQ 的 index 的分开储存的,但是数据(message)是混合储存的,所有 topic 的所有分区的数据都是储存一起的.
  • 这样使得 rocketMQ 在并发的条件下读写性能略逊一筹
  • 并发写会有更多冲突
  • 在读取的时候,每次需要通过索引映射数据,更加麻烦,不利于批量读取

为什么rocketMQ不使用分区分开储存而要使用混合储存的方式?

我没有在文档与书籍中看到为什么 rocketMQ 要使用混合储存的方式,但是我在探究他们的不同的时候发现 kafka 存在分区数量庞大(10000+)会导致性能下降的问题.

  • 原因 1: zookeeper 维护了每一个分区的元数据(Brocker,group 等数据) ,当分区非常大的时候 zookeeper 压力比较大

  • 原因 2:操作系统持有文件句柄数量是有限的,文件数量太多会导致性能下降

rocketMQ针对大topic支持的调整
  • 调整中心节点: rocketMQ 使用的无状态的 nameserv 的模式,只储存他们的端口消息,不储存元数据,在大 topic 的情况下对中心节点的影响很小

  • 采用混合储存的方式减少文件的数量(文件数量减少 1/3)

参考
https://blog.youkuaiyun.com/m0_37607945/article/details/144516423

https://kafka.apache.org/documentation/#introduction

https://rocketmq.apache.org/zh/docs/featureBehavior/01normalmessage

https://blog.youkuaiyun.com/m0_71513446/article/details/143386962

https://rocketmq-learning.com/faq/ons-user-question-history16752/

https://www.bilibili.com/video/BV1Zy411e7qY/?spm_id_from=333.337.search-card.all.click&vd_source=45cb101876b00a49e608d7ab220c9736

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值