引言:为什么需要流量控制?

防止系统过载:

Consumer处理速度:100条/秒
消息生产速度:1000条/秒

结果:消息堆积 → 内存溢出 → 系统崩溃

Producer端限流

// 设置发送超时
producer.setSendMsgTimeout(3000);

// 异步发送队列大小限制
producer.setMaxMessageSize(4 * 1024 * 1024);  // 4MB

Consumer端限流

// 1. 限制拉取数量
consumer.setPullBatchSize(32);  // 每次最多拉32条

// 2. 限制并发消费线程
consumer.setConsumeThreadMin(20);
consumer.setConsumeThreadMax(20);

// 3. 限制消费速率
consumer.setPullInterval(100);  // 拉取间隔100ms

Broker端流控

触发条件:
1. 内存使用超过85%
2. 消息堆积超过阈值
3. PageCache繁忙

流控动作:
- 拒绝Producer发送
- 降低Consumer拉取频率

本文关键词流量控制 限流 背压 系统保护