前言
本文说明的是Kafka的客户端(生产者、消费者)与broker之前的限流,不是kafka的broker间topic副本同步的限流。
客户端限流
在kafka的官方文档,不叫限流,叫做资源配额:通过对客户端请求进行配额,控制集群资源的使用。
主要支持以下两种类型:
- 带宽 (从 0.9 版本开始)
- 请求速率 (从 0.11 版本开始)
带宽就是基于每秒传输多少个字节来进行限制;但是,注意,请求速率并不是每秒客户端可以发起多少个请求,而是网络和 I/O线程 cpu利用率的百分比。
规则
kafka 客户端以“组”来进行配额限流。同组下的所有客户端共享带宽配置,比如:配置带宽10M/秒,则该组所有客户端限制总带宽使用为10M每秒;但是请求速率指的是每个组的client 使用broker上的cpu的百分比。
组的分类规则如下:
- (user, client-id)
- user
- client-id
client-id: 客户端ID,这个比较熟悉,比如在启动一个消费者的时候,配置的一个属性:
// client.id
props.put(ConsumerConfig.CLIENT_ID_CONFIG, "test-consumer-id");
如果不配置,会生成一个默认的:
User需要是开启ACL之后的一个用户主体标识,很多同学如果没用过kafka的ACL,可能对这个不太了解,可以看下这个:kafka快速配置启用ACL示例_不识君的荒漠的博客-CSDN博客_kafka-acls.sh --bootstrap-server
而(user, client-id)这个二元组,就是需要同时指定用户主体标识和客户端ID作为一组分类。
配置位置与优先级
我目前查看官方3.3的文档 Kafka 3.3 Documentation这些配置信息还是在zookeeper上:
- /config/users/<user>/clients/<client-id>
- /config/users/<user>/clients/<default>
- /config/users/<user>
- /config/users/<default>/clients/<client-id>
- /config/users/<default>/clients/<default>
- /config/users/<default>
- /config/clients/<client-id>
- /config/clients/<default>
数字越小,优先级越高。
注意:支持broker级别的配置,但是未验证(我目前用来测试的版本是2.8)。
命令
- 基于(user, client-id)限流配置
sh bin/kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type users --entity-name userName --entity-type clients --entity-name clientId
- 指定用户
sh bin/kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type users --entity-name userName
- 用户级默认配置
sh bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config 'producer_byte_rate=1024,consumer_byte_rate=2048,request_percentage=200' --entity-type users --entity-default
- 指定客户端ID
sh bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config 'producer_byte_rate=1024,consumer_byte_rate=2048,request_percentage=200' --entity-type clients --entity-name clientId
- 客户端ID级默认配置
sh bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config 'producer_byte_rate=1024,consumer_byte_rate=2048,request_percentage=200' --entity-type clients --entity-default
- (user, client-id)级默认配置
sh bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config 'producer_byte_rate=1024,consumer_byte_rate=2048,request_percentage=200' --entity-type users --entity-name userName --entity-type clients --entity-default
- 查看(user, client-id)级配置
sh bin/kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type users --entity-name userName --entity-type clients --entity-name clientId
- 查看用户级配置
sh bin/kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type users --entity-name userName
如果不指定--entity-name,则是查看所有用户
- 查看客户端ID级配置
sh bin/kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type clients --entity-name clientId
如果不指定--entity-name,则是查看所有客户端ID的配置
注意:
- producer_byte_rate=1024,consumer_byte_rate=2048,request_percentage=200三项并不是都需要配置,按需要配置
- 查看配置的时候,对于同一个客户端ID,既在客户端ID级别配置了,又在(user, client-id)级配置,查看的时候,也是分开查看。(user, client-id)级配置只能看到(user, client-id)级的配置。客户端ID级别配置只能看到客户端ID级别配置。
官方文档(中文版)
推荐查看:
Kafka 中文文档 - ApacheCN
版权归原作者 不识君的荒漠 所有, 如有侵权,请联系我们删除。