RocketMQ 开发随笔
消费者在 Push 模式下控制消费速率
RocketMQ 的 Push 模式本质上仍然是 “拉取(Pull)+ 封装”,只是由客户端代替用户自动完成拉取调度。因此,客户端并不能像 Pull 模式那样完全手动控制消息的拉取速度,而是通过一些参数和机制来进行间接调节拉取速度。常见的控制参数包括:
控制消费并发度(最直接的手段)
- 参数:
consumeThreadMin / consumeThreadMax - 本质:控制消费线程池大小
- 影响:
- 并发越高 → 消费能力越强 → 本地堆积减少 → 拉取可以更快进行
- 并发越低 → 消费变慢 → 本地堆积增加 → 反向抑制拉取速度(形成背压)
- 参数:
控制单次拉取的消息数量
- 参数:
pullBatchSize(每次从 Broker 批量拉取的消息条数) - 影响:
- 数量越大 → 单次网络吞吐更高,但可能导致本地短时间堆积
- 数量越小 → 拉取更平滑、延迟更低,但整体吞吐下降
- 参数:
流控机制(核心:消费端背压)
- RocketMQ 内置了基于本地缓存的流控机制:
pullThresholdForQueue(按消息条数限制)pullThresholdSizeForQueue(按消息大小限制)
- 工作机制:
- 消息会先进入本地缓存(
ProcessQueue) - 当
ProcessQueue中的消息堆积超过阈值时: - 客户端会延迟或暂停拉取请求(而不是完全停止)
- 等待消费线程处理一部分消息后,再恢复拉取
- 消息会先进入本地缓存(
- RocketMQ 内置了基于本地缓存的流控机制:
