客户端配额限流是什么
Kafka 配额(client quotas)用于限制单个用户或单个 client-id 对集群资源的占用,主要有三类:producer_byte_rate 限制生产字节速率,consumer_byte_rate 限制消费字节速率,request_percentage 限制该客户端可用请求线程的比例(约当 CPU 占用)。配额可以作用在 user、client-id 或两者组合(user + client-id)上,并支持 default 默认项。命中配额后客户端不会被拒绝,而是被限速(broker 短暂延迟响应),表现为吞吐下降与超时增多。
基本信息
| 实体类型 | users、clients(client-id)、users+clients,均可加 default |
|---|---|
| 常见配置项 | producer_byte_rate、consumer_byte_rate、request_percentage |
| 生效位置 | broker 端,按实体匹配后限速 |
| 变更方式 | kafka-configs.sh 动态修改,或配置文件加 ZK/KRaft 参数 |
| 典型用途 | 防止单个业务压垮共享集群 |
典型使用场景
- 多租户共享集群:给每个业务系统设置生产与消费速率上限,保证互不干扰
- 防止单个客户端的大量 fetch 请求占满请求处理线程,影响其他客户端
- 压测期间限制测试客户端流量,避免影响生产消费
- 新接入方上线时先设保守默认配额,稳定后再按实际流量调整
- 故障隔离:某客户端异常重试风暴时,配额能限制其影响面
设置与查看配额
设置与查看配额
# 为用户设置生产与消费速率配额(单位:字节/秒)
kafka-configs.sh --bootstrap-server localhost:9092 \
--entity-type users --entity-name app-order \
--alter --add-config 'producer_byte_rate=1048576,consumer_byte_rate=2097152'
# 为 client-id 设置请求比例配额
kafka-configs.sh --bootstrap-server localhost:9092 \
--entity-type clients --entity-name order-consumer \
--alter --add-config 'request_percentage=200'
# 查看配额
kafka-configs.sh --bootstrap-server localhost:9092 \
--entity-type users --entity-name app-order --describe
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type users --entity-default --describe三类配额对照
| 配置项 | 限制对象 | 单位 | 命中表现 |
|---|---|---|---|
| producer_byte_rate | 生产字节速率 | 字节/秒 | 生产吞吐下降、重试增多 |
| consumer_byte_rate | 消费字节速率 | 字节/秒 | 消费变慢、lag 上升 |
| request_percentage | 请求线程占用比例 | 百分比(相对单线程) | 请求排队、响应变慢 |
| user + client-id | 更细粒度的组合 | 同上 | 优先级高于单一实体配额 |
配额是限速而不是拒绝:被限速的客户端会快速堆积发送缓冲并报出超时,排障时要先看是否命中了配额指标,再去怀疑网络与 broker 负载。
实体匹配有优先级顺序:更具体的 user + client-id 优先于单一实体,单一实体优先于默认项;排查“为什么限速值和我设的不一样”时先按这个顺序核对。
对所有用户设置过低的默认配额会全面拖慢业务,配额应按租户评估后再设,改完要观察一段时间再固化。