
# 消费组（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正确的订阅关系一致设置   
![](https://support.huaweicloud.com/productdesc-hrm/zh-cn_image_0000002662926585.png "点击放大")
#### 消费组的分类
依据消息分发到组内实例的方式，消费组的消费模式可分为集群消费模式和广播消费模式。
- **集群消费模式**：核心特征是负载均衡，组内实例分摊消息，每条消息仅被一个实例消费，适用于通过扩容提升处理能力的场景，如订单处理、日志分析等。消费进度由服务端统一维护。
- **广播消费模式**：核心特征是全量分发，组内每个实例都会消费所有消息，适用于所有节点同步执行相同逻辑的场景，如配置更新、缓存刷新等。消费进度由各实例本地维护。
 
#### 与消费组相关的操作和特性
在全面了解消费组的核心概念与应用场景后，本小节将为您介绍消费组的常用基础操作与高级应用特性。如果您想要深入了解并在实际业务中配置使用，可以点击相关超链接跳转查看详细的华为云官方文档。
**消费组相关基础操作**：
- 创建消费组：创建一个消费组后，消费者可以将同一类消息的消费归入同一个消费组，方便管理，详情请参考[创建RocketMQ消费组](https://support.huaweicloud.com/usermanual-hrm/hrm-ug-013.html)。
- 修改消费组：消费组创建成功后，可以根据业务需要修改消费组的配置信息，详情请参考[修改RocketMQ消费组配置](https://support.huaweicloud.com/usermanual-hrm/hrm-ug-015.html)。
- 删除消费组：当消费组不需要使用时，可以删除消费组，释放资源，详情请参考[删除RocketMQ消费组](https://support.huaweicloud.com/usermanual-hrm/hrm-ug-016.html)。
**更多相关操作：**
- 消费消息：消费者登录客户端连接RocketMQ实例，消费主题中的消息，详情请参考[使用客户端连接RocketMQ（关闭SSL）](https://support.huaweicloud.com/usermanual-hrm/hrm-ug-039.html)或[使用客户端连接RocketMQ（开启SSL）](https://support.huaweicloud.com/usermanual-hrm/hrm-ug-040.html)。
- 为用户赋予不同的消费组权限：当您需要创建多个用户并为其赋予不同的消费组权限，以达到用户之间的权限隔离时，可以开启ACL访问控制并配置用户，详情请参考[开启RocketMQ ACL访问](https://support.huaweicloud.com/usermanual-hrm/hrm-ug-070.html)和[配置RocketMQ ACL用户](https://support.huaweicloud.com/usermanual-hrm/hrm-ug-035.html)。
- 重置消费进度：当消费者希望重新消费或跳过消费部分消息时，可以通过重置消费位点来调整消费进度，详情请参考[重置RocketMQ消费进度](https://support.huaweicloud.com/usermanual-hrm/hrm-ug-051.html)。
 
