RocketMQ-消息有序实现方案

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

消息有序

全局有序

  1. 在整个MQ集群内,消息都是按照生产者的生产顺序存放,消费者也是按此顺序进行消费
  2. 优点:生产者不需要额外的处理,由MQ集群保证消息全局有序
  3. 缺点:牺牲了高可用、性能

为什么会牺牲高可用?

高可用MQ集群的常见部署

在这里插入图片描述

全局有序部署方案

在这里插入图片描述

  1. 为了保证MQ集群内消息有序,对于全局有序的topic,只会在一台broker机器上创建一个queue,而queue内的消息是保证有序的,这样生产者和消费都都只能按序消费

  2. 这种方案很明显的缺点就是当broker2机器挂了,《Topic-全局有序》相关的业务将无法写入和消费消息,并且由于一个queue只能由一个consumer实例消费(clustering模式下),所以性能也就可想而知的差了

  3. 反观TopicA,由于在broker1,broker2上都有创建queue,当其中一台broker不可用时,写入和消费将由另外一台broker的其他queue接管,所以对于TopicA来说实现高可用和高性能

部分有序

  1. 参见上图中的TopicA部署
  2. 消息在queue里是保证有序的
  3. 优点:高可用,性能好
  4. 缺点:
    1. 生产者需要在生产消息时做特殊处理
    2. 在可用queue数量变化情况下(例如broker1挂了),会导致短暂的消息乱序
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值