消费组
本节介绍 Apache RocketMQ 中消费组的定义、模型关系、内部属性和行为约束。本主题还提供消费组的版本兼容性信息和使用注意事项。
定义
消费组是 Apache RocketMQ 中包含使用相同消费行为的消费者的负载均衡组。
与运行实体消费者不同,消费组是逻辑资源。Apache RocketMQ 在一个消费组中初始化多个消费者,以实现消费性能的扩展和高可用性灾备。
在消费组中,消费者根据组中定义的消费行为和负载均衡策略来消费消息。以下部分描述了定义的消费行为
订阅:Apache RocketMQ 基于消费组管理和跟踪订阅。有关更多信息,请参阅订阅。aa
投递顺序:Apache RocketMQ 代理使用顺序投递或并发投递将消息投递给消费者。您可以在消费组中配置投递方法。有关更多信息,请参阅顺序消息。
消费重试策略:消费者消费消息失败时使用的重试策略。策略包括重试次数和死信队列设置。有关更多信息,请参阅消费重试。
模型关系
下图显示了消费组在 Apache RocketMQ 领域模型中的位置。
消息由生产者初始化并发送到 Apache RocketMQ 服务器。
消息按照到达 Apache RocketMQ 服务器的顺序存储在 Topic 的指定队列中。
消费者根据指定的订阅关系从 Apache RocketMQ 服务器获取并消费消息。
内部属性
消费组名称
定义:消费组的名称。消费组名称用于区分不同的消费组。消费组名称在集群中是全局唯一的。
取值:由用户创建和配置。有关更多信息,请参阅参数限制。
投递顺序
定义:Apache RocketMQ 向消费者客户端投递消息的顺序。
Apache RocketMQ 根据不同的消费场景支持顺序投递和并发投递。有关更多信息,请参阅顺序消息。
- 取值:默认投递方式为并发投递。
消费重试策略
定义:消费者消费消息失败时使用的重试策略。如果消费者消费消息失败,系统将根据策略将失败的消息重新投递给消费者进行重新消费。有关更多信息,请参阅消费重试。
取值:消费重试策略包含以下项
最大重试次数:消息可以重新投递的最大次数。如果消息消费失败且超过最大重试次数,则消息将被投递到死信队列或被丢弃。
重试间隔:Apache RocketMQ 代理重新投递失败消息的间隔。
有关最大重试次数和重试间隔的有效值和默认值,请参阅参数限制。
- 约束:重试间隔仅适用于推送消费者(Push Consumer)。
订阅
- 定义:与当前消费组关联的订阅关系集合。订阅包括消费者订阅的 Topic 和消费者使用的消息过滤规则。有关更多信息,请参阅订阅。
消费者动态注册消费组的订阅。Apache RocketMQ 代理持久化订阅并将其与消息的消费进度匹配。
行为约束
在 Apache RocketMQ 领域模型中,消费管理通过消费分组实现,同一组内的消费者共享消息进行消费。因此,为确保组内消息的正常负载和消费,Apache RocketMQ 要求同一组内的所有消费者保持以下消费行为一致:
投递顺序
消费重试策略
版本兼容性
如行为约束中所述,同一组内所有消费者的投递顺序和消费重试策略需要一致。
Apache RocketMQ 服务器版本 5.x:上述消费者的消费行为从关联的消费组中获取。因此,同一组内所有消费者的消费行为必须一致,客户端无需关注。
Apache RocketMQ 服务器历史版本 3.x/4.x:上述消费逻辑由消费者客户端接口定义。因此,设置消费者客户端时,必须确保同一组内消费者的消费行为一致。
如果您使用 Apache RocketMQ 服务器版本 5.x 且客户端使用旧版本 SDK,则消费者的消费逻辑受消费者客户端接口设置的约束。
使用注意事项
根据业务需求创建消费组
在 Apache RocketMQ 中,消费者和 Topic 之间是多对多的映射关系。我们建议您在创建消费组之前注意以下规则:
消息投递顺序一致:消费组中所有消费者的消息投递顺序必须一致。投递方式为顺序投递或并发投递。建议不同业务场景不要使用同一个消费组。
业务类型一致:一个消费组对应一个 Topic。不同业务领域对消息消费有不同的要求,例如消息过滤规则和消费重试策略。建议在不同业务领域使用不同的消费组。我们还建议一个消费组最多添加 10 个 Topic。
避免使用自动化机制管理消费组
在 Apache RocketMQ 架构中,消费组是用于管理消费者状态的逻辑资源。每个消费组都关联着各种数据,例如消费状态、累积消息、可观测指标和监控数据。建议您严格管理消费组。在添加、删除、修改或查询消费组时,请谨慎操作。
Apache RocketMQ 提供了自动创建消费组的功能。但是,如果在生产环境中启用此功能,可能会创建大量消费组。大量消费组难以管理和回收,导致系统资源浪费。因此,建议仅在测试环境中使用此功能。