更新时间:2026-07-16 GMT+08:00
分享

消费组(Consumer Group)

消费组由多个具有相同消费属性的消费者组成,各自维护独立的消费进度(Offset)。不同消费组同时订阅同一主题时,每条消息会被每个消费组各自消费一次;同一消费组内(非广播模式),每条消息仅被组内某一个消费者消费一次。

为什么需要消费组

在现代分布式系统中,消息的消费端往往需要多个实例协同工作,以应对高并发和可靠性的需求。然而,多个消费者实例如何高效分摊消息、如何在实例故障时保障消息不丢失,是需要解决的问题。消费组通过将多个消费者实例组织在一起,实现了消息的负载均衡和重平衡,既提升了消费端的处理能力,又保障了故障场景下的消息可靠性。

消费组的优势是什么

  • 负载均衡:消费组内的消费者实例可以自动分配消息,确保每个实例的负载均衡,提高系统整体处理能力。
  • 重平衡:当消费者实例故障时,消费组自动将其负责的消息队列重新分配给其他实例,从已提交的消费进度继续消费,确保消息不丢失。
  • 有序消费:消费组支持同一消息队列内的有序消费,确保该队列中的消息按发送顺序被处理,适用于对消息顺序有严格要求的场景。

消费组的工作原理

消费原理

RocketMQ为每个Topic划分了消息队列(Queue),队列数越大消费的并发度越大。一个消费组表示一个消费者群组,在分布式应用场景下,同一个消费组中的多个消费者共同完成Topic所有Queue的消费。Queue的分配以消费组为单位,会均匀分配给消费组下的消费者,而不会在意该消费者是否订阅了当前Topic。一个消费者只会分配到Topic中的某几个Queue,而一个Queue只会分配给一个消费者。

正确的订阅关系

在分布式应用场景下,一个消费组中所有的消费者拥有一个相同的消费组ID,他们需订阅相同的Topic和Tag,保持订阅关系一致,才能保证消息消费逻辑正确,消息不丢失。

  • 同一个消费组的消费者必须订阅同一个Topic。例如,消费组Group1中有消费者A和消费者B,消费者A订阅了Topic A和Topic B,则消费者B也必须订阅Topic A和Topic B,不能只订阅Topic A或只订阅Topic B,或者额外订阅Topic C。
  • 同一个消费组的消费者订阅同一个Topic下的Tag必须一致,包括Tag的数量和顺序。例如,消费组Group2中有消费者A和消费者B,消费者A订阅Topic A且Tag为Tag A||Tag B,则消费者B订阅Topic A时Tag也必须为Tag A||Tag B,不能只订阅Tag A或只订阅Tag B或订阅Tag B||Tag A。
图1 正确的订阅关系一致设置

消费组的分类

依据消息分发到组内实例的方式,消费组的消费模式可分为集群消费模式和广播消费模式。

  • 集群消费模式:核心特征是负载均衡,组内实例分摊消息,每条消息仅被一个实例消费,适用于通过扩容提升处理能力的场景,如订单处理、日志分析等。消费进度由服务端统一维护。
  • 广播消费模式:核心特征是全量分发,组内每个实例都会消费所有消息,适用于所有节点同步执行相同逻辑的场景,如配置更新、缓存刷新等。消费进度由各实例本地维护。

与消费组相关的操作和特性

在全面了解消费组的核心概念与应用场景后,本小节将为您介绍消费组的常用基础操作与高级应用特性。如果您想要深入了解并在实际业务中配置使用,可以点击相关超链接跳转查看详细的华为云官方文档。

消费组相关基础操作

  • 创建消费组:创建一个消费组后,消费者可以将同一类消息的消费归入同一个消费组,方便管理,详情请参考创建RocketMQ消费组
  • 修改消费组:消费组创建成功后,可以根据业务需要修改消费组的配置信息,详情请参考修改RocketMQ消费组配置
  • 删除消费组:当消费组不需要使用时,可以删除消费组,释放资源,详情请参考删除RocketMQ消费组

更多相关操作:

相关文档