消息有序
全局有序
- 在整个MQ集群内,消息都是按照生产者的生产顺序存放,消费者也是按此顺序进行消费
- 优点:生产者不需要额外的处理,由MQ集群保证消息全局有序
- 缺点:牺牲了高可用、性能
为什么会牺牲高可用?
高可用MQ集群的常见部署

全局有序部署方案

为了保证MQ集群内消息有序,对于全局有序的topic,只会在一台broker机器上创建一个queue,而queue内的消息是保证有序的,这样生产者和消费都都只能按序消费
这种方案很明显的缺点就是当broker2机器挂了,《Topic-全局有序》相关的业务将无法写入和消费消息,并且由于一个queue只能由一个consumer实例消费(clustering模式下),所以性能也就可想而知的差了
反观TopicA,由于在broker1,broker2上都有创建queue,当其中一台broker不可用时,写入和消费将由另外一台broker的其他queue接管,所以对于TopicA来说实现高可用和高性能
部分有序
- 参见上图中的TopicA部署
- 消息在queue里是保证有序的
- 优点:高可用,性能好
- 缺点:
- 生产者需要在生产消息时做特殊处理
- 在可用queue数量变化情况下(例如broker1挂了),会导致短暂的消息乱序
生产者处理代码示例
Message msg <

本文探讨了RocketMQ在确保消息有序性方面的方案,包括全局有序和部分有序。全局有序虽能保证消息顺序,但牺牲了高可用性和性能。部分有序则允许高可用和性能,但需要生产者特殊处理。文中提出结合两种方式,通过时间戳和全量消息体在异常情况下保持高可用和消息有序,但也指出了可能存在的问题,如时间错乱导致的消息丢失风险。
最低0.47元/天 解锁文章
2334

被折叠的 条评论
为什么被折叠?



