背景

生产者和消费者以极高的速度生产/消费大量数据或产生请求,从而占用broker上的全部资源,造成网络 IO 饱和。有了配额(Quotas)就可以避免这些问题。Kafka 支持配额管理,从而可以对 Producer 和 Consumer 的 produce&fetch 操作进行流量限制,防止个别业务压爆服务器。

限制producer端速率

为所有 client id 设置默认值,以下为所有 producer 程序设置其 TPS 不超过 1MB/s,即 1048576/s,命令如下:

1
./bin/kafka-configs.sh --zookeeper IP:2181 --alter --add-config 'producer_byte_rate=1048576' --entity-type clients --entity-default

限制consumer端速率

对consumer限速与producer类似,只不过参数名不一样。为指定的topic进行限速,以下为所有 consumer 程序设置topic速率不超过 1MB/s,即 1048576/s。命令如下:

1
./bin/kafka-configs.sh --zookeeper IP:2181 --alter --add-config 'consumer_byte_rate=1048576' --entity-type clients --entity-default

取消Kafka的Quota配置

使用以下命令,删除Kafka的Quota配置:

1
2
./bin/kafka-configs.sh --zookeeper IP:2181 --alter --delete-config 'producer_byte_rate' --entity-type clients --entity-default
./bin/kafka-configs.sh --zookeeper IP:2181 --alter --delete-config 'consumer_byte_rate' --entity-type clients --entity-default