跳转至主要内容
版本: 5.0

消费者组 (Consumer Group)

本节介绍 Apache RocketMQ 中消费者组的定义、模型关系、内部属性和行为约束。此外,还提供了关于消费者组的版本兼容性信息和使用注意事项。

定义

消费者组是 Apache RocketMQ 中的一个负载均衡分组,包含使用相同消费行为的消费者。

与作为运行实体的消费者不同,消费者组是逻辑资源。Apache RocketMQ 在一个消费者组中初始化多个消费者,以实现消费性能的扩展和高可用灾难恢复。

在消费者组中,消费者根据组内定义的消费行为和负载均衡策略消费消息。以下部分描述了已定义的消费行为。

  • 订阅:Apache RocketMQ 基于消费者组管理和追踪订阅。有关更多信息,请参阅 订阅

  • 投递顺序:Apache RocketMQ Broker 通过顺序投递或并发投递方式向消费者发送消息。您可以在消费者组中配置投递方式。有关更多信息,请参阅 FIFO 消息

  • 消费重试策略:当消费者消费消息失败时使用的重试策略。该策略包括重试次数和死信队列的设置。有关更多信息,请参阅 消费重试

模型关系

下图显示了消费者组在 Apache RocketMQ 领域模型中的位置。Consumer groups

  1. 消息由生产者初始化并发送到 Apache RocketMQ 服务端。

  2. 消息按到达 Apache RocketMQ 服务端的顺序存储在主题的指定队列中。

  3. 消费者根据指定的订阅关系从 Apache RocketMQ 服务端获取并消费消息。

内部属性

消费者组名称

  • 定义:消费者组的名称。消费者组名称用于区分不同的消费者组。消费者组名称在集群内全局唯一。

  • 取值:由用户创建和配置。有关更多信息,请参阅 参数限制

投递顺序

  • 定义:Apache RocketMQ 向消费者客户端投递消息的顺序。

    Apache RocketMQ 支持根据不同的消费场景采用顺序投递和并发投递。有关更多信息,请参阅 FIFO 消息

  • 取值:默认投递方式为并发投递。

消费重试策略

  • 定义:当消费者消费消息失败时使用的重试策略。如果消费者消费消息失败,系统将根据该策略将失败的消息重新投递给消费者进行再次消费。有关更多信息,请参阅 消费重试

  • 取值:消费重试策略包含以下项:

    • 最大重试次数:消息可以被重新投递的最大次数。如果消息消费失败且超过了最大重试次数,该消息将被投递到死信队列或被丢弃。

    • 重试间隔:Apache RocketMQ Broker 重新投递失败消息的间隔时间。

有关最大重试次数和重试间隔的有效值及默认值的更多信息,请参阅 参数限制

  • 约束:重试间隔仅对 Push 消费者有效。

订阅 (Subscription)

  • 定义:与当前消费者组关联的订阅关系集合。订阅包括消费者订阅的主题以及消费者使用的消息过滤规则。有关更多信息,请参阅 订阅

消费者动态注册消费者组的订阅。Apache RocketMQ Broker 持久化订阅信息,并将订阅与消息的消费进度进行匹配。

行为约束

在 Apache RocketMQ 领域模型中,消费者管理是通过消费者分组实现的,同一组内的消费者共享消息进行消费。因此,为确保组内消息的负载均衡和正常消费,Apache RocketMQ 要求同一组内的所有消费者保持以下消费行为一致:

  • 投递顺序

  • 消费重试策略

版本兼容性

如行为约束中所述,同一组内所有消费者的投递顺序和消费重试策略需要保持一致。

  • Apache RocketMQ 服务端 5.x 版本:上述消费行为从关联的消费者组中获取。因此,同一组内所有消费者的消费行为必须保持一致,客户端无需额外关注。

  • Apache RocketMQ 服务端 3.x/4.x 历史版本:上述消费逻辑由消费者客户端接口定义。因此,在设置消费者客户端时,必须确保同一组内消费者的消费行为保持一致。

如果您使用 Apache RocketMQ 服务端 5.x 版本,但客户端使用旧版本 SDK,则消费者的消费逻辑遵循消费者客户端接口的设置。

使用说明

根据业务需求创建消费者组

在 Apache RocketMQ 中,消费者和主题之间存在多对多映射关系。我们建议您在创建消费者组前注意以下规则:

  • 保持消息投递顺序一致:消费者组内所有消费者的消息投递顺序必须一致。投递方式要么是顺序投递,要么是并发投递。我们建议不要将同一个消费者组用于不同的业务场景。

  • 业务类型一致:一个消费者组对应一个业务逻辑。不同的业务域对消息消费有不同的要求,例如消息过滤规则和消费重试策略。我们建议在不同的业务域使用不同的消费者组。我们还建议每个消费者组中包含的主题数量不超过 10 个。

避免使用自动化机制管理消费者组

在 Apache RocketMQ 架构中,消费者组是用于管理消费者状态的逻辑资源。每个消费者组都关联着各种数据,例如消费状态、堆积消息、可观测指标和监控数据。我们建议您严格管理您的消费者组。在添加、删除、修改或查询消费者组时请务必谨慎。

Apache RocketMQ 提供自动创建消费者组的功能。但是,如果您在生产环境中启用此功能,可能会创建大量的消费者组。过多的消费者组难以管理和回收,并会导致系统资源的浪费。因此,我们建议仅在测试环境中使用此功能。