为什么阿里要自研 RocketMQ ?
为什么要重写一个类似于 Kafka 的消息队列,而非基于 Kafka 作二次开发?
初衷
Kafka is a distributed streaming platform, which was born from logging aggregation cases. 它并不需要太高的并发. In some large scale cases in alibaba, we found that the original model 无法满足我们的实际需求.
无法支持更多分区
- Each partition stores the whole message data. 尽管单个分区是顺序写的, 随着越来越多的针对不同分区的写入, 在操作系统层面已经变为随机写了.
- Due to the scattered data files, it is difficult to use the Linux IO Group Commit mechanism.
RocketMQ 支持更多分区
- 所有消息数据都存储在 Commit Log 文件中。所有写入都是完全顺序的,而读取是随机的。对磁盘的访问是完全顺序的,这避免了磁盘锁争用,并且在创建大量队列时不会导致高磁盘 IO 等待。
ConsumeQueue
存储实际的用户消费位置信息,这些信息也以顺序方式刷新到磁盘。