消费者组
本节介绍 Apache RocketMQ 中消费者组的定义、模型关系、内部属性和行为约束。本主题还提供消费者组的版本兼容性信息和使用注意事项。
定义
消费者组是包含使用相同消费行为的消费者的负载均衡组,在 Apache RocketMQ 中。
与作为运行实体的消费者不同,消费者组是逻辑资源。Apache RocketMQ 初始化消费者组中的多个消费者,以实现消费性能的扩展和高可用性灾难恢复。
在消费者组中,消费者根据组中定义的消费行为和负载均衡策略来消费消息。以下部分描述了定义的消费行为
订阅:Apache RocketMQ 基于消费者组管理和跟踪订阅。有关更多信息,请参阅 订阅。aa
传递顺序:Apache RocketMQ 代理使用有序传递或并发传递将消息传递给消费者。您可以在消费者组中配置传递方法。有关更多信息,请参阅 fifo 消息。
消费重试策略:消费者无法消费消息时使用的重试策略。该策略包括重试次数和死信队列的设置。有关更多信息,请参阅 消费重试。
模型关系
下图显示了消费者组在 Apache RocketMQ 领域模型中的位置。
消息由生产者初始化并发送到 Apache RocketMQ 服务器。
消息按到达 Apache RocketMQ 服务器的顺序存储在主题的指定队列中。
消费者根据指定的订阅关系从 Apache RocketMQ 服务器获取和消费消息。
内部属性
消费者组名称
定义:消费者组的名称。消费者组名称用于区分消费者组。消费者组名称在集群中是全局唯一的。
值:由用户创建和配置。有关更多信息,请参阅 参数限制。
传递顺序
定义:Apache RocketMQ 将消息传递给消费者客户端的顺序。
Apache RocketMQ 基于不同的消费场景支持有序传递和并发传递。有关更多信息,请参阅 Fifo 消息。
- 值:默认传递方法是并发传递。
消费重试策略
定义:消费者无法消费消息时使用的重试策略。如果消费者无法消费消息,系统将根据策略重新将失败的消息传递给消费者以重新消费。有关更多信息,请参阅 消费重试。
值:消费重试策略包含以下项目
最大重试次数:消息可以重新传递的最大次数。如果消息无法消费且超过最大重试次数,则将消息传递到死信队列或丢弃。
重试间隔:Apache RocketMQ 代理重新传递失败消息的间隔。
有关最大重试次数和重试间隔的有效值和默认值的更多信息,请参阅 参数限制。
- 约束:重试间隔仅适用于推式消费者。
订阅
- 定义:与当前消费者组关联的订阅关系集。订阅包括消费者订阅的主题和消费者使用的消息过滤器规则。有关更多信息,请参阅 订阅。
消费者为消费者组动态注册订阅。Apache RocketMQ 代理持久化订阅并将订阅与消息的消费进度匹配。
行为约束
在 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 提供自动创建消费者组的功能。但是,如果您在生产环境中启用此功能,可能会创建大量消费者组。大量消费者组可能难以管理和回收,并导致系统资源浪费。因此,我们建议您仅在测试环境中使用此功能。