《RocketMQ 官网》阅读笔记 RocketMQ 消费者组(Consumer Group)消费者(Consumer)

《RocketMQ 官网》阅读笔记 RocketMQ 消费者组(Consumer Group)消费者(Consumer)
《RocketMQ 官网》阅读笔记 RocketMQ 消费者组Consumer Group消费者组Consumer Group定义消费者组是 Apache RocketMQ 中的一个负载均衡分组包含使用相同消费行为的消费者。与作为运行实体的消费者不同消费者组是逻辑资源。Apache RocketMQ 在一个消费者组中初始化多个消费者以实现消费性能的扩展和高可用灾难恢复。在消费者组中消费者根据组内定义的消费行为和负载均衡策略消费消息。以下部分描述了已定义的消费行为。订阅Apache RocketMQ 基于消费者组管理和追踪订阅。投递顺序Apache RocketMQ Broker 通过顺序投递或并发投递方式向消费者发送消息。您可以在消费者组中配置投递方式。消费重试策略当消费者消费消息失败时使用的重试策略。该策略包括重试次数和死信队列的设置。模型关系内部属性消费者组名称消费者组名称用于区分不同的消费者组。消费者组名称在集群内全局唯一。由用户创建和配置。投递顺序Apache RocketMQ 向消费者客户端投递消息的顺序。Apache RocketMQ 支持根据不同的消费场景采用顺序投递和并发投递。默认投递方式为并发投递。消费重试策略当消费者消费消息失败时使用的重试策略。如果消费者消费消息失败系统将根据该策略将失败的消息重新投递给消费者进行再次消费。消费重试策略包含以下项最大重试次数消息可以被重新投递的最大次数。如果消息消费失败且超过了最大重试次数该消息将被投递到死信队列或被丢弃。重试间隔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 提供自动创建消费者组的功能。但是如果您在生产环境中启用此功能可能会创建大量的消费者组。过多的消费者组难以管理和回收并会导致系统资源的浪费。因此我们建议仅在测试环境中使用此功能。消费者Consumer定义消费者是 Apache RocketMQ 中接收并处理消息的实体。消费者通常集成在业务系统中。它们从 Apache RocketMQ Broker 获取消息并将消息转换为业务逻辑可感知和处理的信息。以下因素决定了消费者的行为消费者身份消费者必须关联一个消费者组以获取行为设置和消费状态。消费者类型Apache RocketMQ 针对不同的开发场景提供了多种消费者类型包括推模式消费者Push Consumer、简单消费者Simple Consumer和拉模式消费者Pull Consumer。更多信息请参见 消费者类型。消费者本地设置这些设置指定了消费者客户端如何根据消费者类型进行运行。例如您可以配置消费者上的线程数和并发设置以实现不同的传输效果。模型关系内部属性消费者组名称当前消费者关联的消费者组名称。消费者从消费者组继承其行为。消费者组是 Apache RocketMQ{#product-name} 的逻辑资源。您必须提前使用控制台或调用 API 操作来创建消费者组。客户端 IDClient ID消费者客户端的标识。此属性用于区分不同的消费者。该值在集群内必须是唯一的。客户端 ID 由 Apache RocketMQ SDK 自动生成。它主要用于日志查看和问题定位等运维目的。客户端 ID 不可修改。通信参数接入点 (Endpoints) 必选用于连接服务器的接入点。此接入点用于标识集群。接入点必须按格式进行配置。建议使用域名避免使用 IP 地址以防节点变更时无法进行热点迁移。凭证 (Credential) 可选客户端用于身份验证的凭证。仅当服务器启用了身份识别和认证时才需要传输此项。请求超时时间 (Request Timeout) 可选网络请求的超时时间。预绑定订阅列表指定消费者的订阅列表。Apache RocketMQ Broker 可以利用预绑定订阅列表在消费者初始化时而非应用程序启动后验证所订阅 Topic 的权限和有效性。建议在消费者初始化时指定订阅或已订阅 Topic 的列表。如果未指定订阅或变更了已订阅的 TopicApache RocketMQ 会动态验证这些 Topic。消息监听器 (Message Listener)消费者在 Apache RocketMQ Broker 将消息推送给消费者后用于调用消息消费逻辑的监听器。消息监听器的值在消费者客户端上进行配置。当您以推模式消费者身份消费消息时必须在消费者客户端配置消息监听器。行为约束在 Apache RocketMQ 领域模型中消费者管理通过消费者分组实现同一组内的消费者共享消息进行消费。因此为确保组内消息的正常负载和消费Apache RocketMQ 要求同一组内的所有 消费者保持以下消费行为一致投递顺序消费重试策略版本兼容性如“行为约束”所述同一组内所有消费者的投递顺序和消费重试策略需要保持一致。Apache RocketMQ 服务端 5.x 版本上述消费行为均从关联的消费者组获取。因此同一组内所有消费者的消费行为必须保持一致客户端无需特别关注。Apache RocketMQ 服务端 3.x/4.x 旧版本上述消费逻辑由消费者客户端接口定义。因此在设置消费者客户端时必须确保同一组内消费者的消费行为一致。如果您使用的是 Apache RocketMQ 服务端 5.x 版本但客户端使用的是旧版本 SDK则消费者的消费逻辑需遵循消费者客户端接口的设置。使用说明建议限制单个进程中的消费者数量。Apache RocketMQ 的消费者在通信协议层面支持非阻塞传输模式。该模式具有更高的通信效率并支持多线程并发访问。因此在大多数场景下单个进程中仅需为一个消费者组初始化一个消费者即可。在开发阶段请避免使用相同的配置初始化多个消费者。建议不要频繁创建和销毁消费者。Apache RocketMQ 的消费者是底层资源可以像 数据库连接池一样重复使用。您无需在每次接收消息时创建消费者也无需在消费消息后销毁它们。如果频繁创建和销毁消费者Broker 上会产生大量的短连接请求这将给您的系统带来沉重的负载。正确示例ConsumercConsumerBuilder.build();for(inti0;in;i){Messagemc.receive();//process message}c.shutdown();错误示例for(inti0;in;i){ConsumercConsumerBuilder.build();Messagemc.receive();//process messagec.shutdown();}