RocketMQ是如何做到比Kafka支持更多队列

Kafka与RocketMQ

Kafka是一个分布式流平台,它源自于日志聚合案例,它不需要太高的并发性。在阿里巴巴的一些大型案例中,发现原来的模式已经不能满足实际需求。因此,开发了一个名为RocketMQ的消息中间件,它可以处理广泛的场景,从传统的发布/订阅场景到要求高容量、不允许消息丢失的实时事务系统等。

Kafka的分区设计

如何选择Kafka集群中Topic分区数量请参考文章: https://www.confluent.io/blog/how-choose-number-topics-partitions-kafka-cluster

为什么Kafka不能支持更多的分区?

RocketMQ 是如何支持更多的分区的?

RocketMQ生产消费机制

优势:

每个消费队列都变得轻量化,并且包含有限数量的元数据(数据量变少)。

对磁盘的访问是完全连续的,这样可以避免磁盘锁争夺,并且在创建大量队列时不会导致高磁盘IO等待。

劣势:

消费消息将首先读取消费队列,然后提交日志,在最坏的情况下,过程会带来一定的成本。

提交日志和使用队列需要逻辑一致,这会给编程模型带来额外的复杂性。

RocketMQ设计的动机

  1. 随机读:尽可能多地读取以增加页面缓存命中率,并减少读取IO操作。所以在大内存情况下是仍然是适合的。如果积压了大量的消息,读取的性能会严重下降吗?答案是否定的。

原因如下:

  1. 由于ConsumeQueue只存储固定大小的元数据,主要用于记录消费过程,因此支持随机读取。利用页面缓存预取,即使是在大量消息积压的情况下,访问ConsumeQueue的速度与访问主内存一样快。因此,ConsumeQueue不会带来明显的读取性能影响。
  2. CommitLog几乎存储所有信息,包括消息数据。与关系数据库的重做日志类似,只要存在提交日志,就可以完全恢复使用队列、消息键索引和所有其他所需数据。

最后欢迎大家点赞、收藏、评论,转发!

欢迎大家关注我的微信公众号!微信搜索:进击的Matrix

展开阅读全文

页面更新:2024-04-25

标签:队列   缓存   磁盘   分区   数量   内存   性能   消息   更多   数据   日志

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top