MQ对比
存储结构
kafka:写入时按topic写入对应的partion,容易横向扩展
partion: 每个topic有单独的partion,包含三个属性 offset messageSize data,这样设计区别于下面两种MQ。支持高可吞吐和可扩展,(不同topic读写不同文件)
segement: 将partion分段
index:segement的索引文件,加快检索速度,没有像rocketmq为每条消息建立索引。而是稀疏索引,减少空间。所以不支持rocketmq的消息id精确查询,但是如果生产者指定消息key,kafka也会额外维护hash索引,实现按key检索
rocketMq:所有topic写入都是按顺序写入commitLog
commitlog:顺序写
consumequeue:每个topic对应一个消费队列,记录消息在commitLog的实际位置。消费这订阅数据 不需要遍历整个commitlog,只需要根据偏移量从consumequeue文件查出在commitlog的偏移量
index:hash索引,为每个消息创建,结构 数组+链表
固定延迟队列
qmq:
messageLog:subject 的消息合并在一起,减少 parition 数量,单一集群可以支撑更多的 subject,采取和rocketmq一样的设计方式,携程业务痛点,topic很多
consumeLog:类似rocketmq的consumequeue,topic的消息队列
pullLog:解耦partion和consumer,解决kafka的静态绑定的缺点
使用双重时间轮支持任意精度延迟