kafka的客户端限流(资源配额)

Posted 不识君的荒漠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kafka的客户端限流(资源配额)相关的知识,希望对你有一定的参考价值。

前言

本文说明的是Kafka的客户端(生产者、消费者)与broker之前的限流,不是kafka的broker间topic副本同步的限流。

客户端限流

在kafka的官方文档,不叫限流,叫做资源配额:通过对客户端请求进行配额,控制集群资源的使用。

主要支持以下两种类型:

  1. 带宽 (从 0.9 版本开始)
  2. 请求速率 (从 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上:

  1. /config/users/<user>/clients/<client-id>
  2. /config/users/<user>/clients/<default>
  3. /config/users/<user>
  4. /config/users/<default>/clients/<client-id>
  5. /config/users/<default>/clients/<default>
  6. /config/users/<default>
  7. /config/clients/<client-id>
  8. /config/clients/<default>

数字越小,优先级越高。

注意:支持broker级别的配置,但是未验证(我目前用来测试的版本是2.8)。

命令

1. 基于(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

2. 指定用户

sh bin/kafka-configs.sh  --bootstrap-server localhost:9092 --describe --entity-type users --entity-name userName

3. 用户级默认配置

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

4. 指定客户端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

5. 客户端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

6. (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

7. 查看(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

8. 查看用户级配置

sh bin/kafka-configs.sh  --bootstrap-server localhost:9092 --describe --entity-type users --entity-name userName

如果不指定--entity-name,则是查看所有用户 

9. 查看客户端ID级配置

sh bin/kafka-configs.sh  --bootstrap-server localhost:9092 --describe --entity-type clients --entity-name clientId

如果不指定--entity-name,则是查看所有客户端ID的配置 

注意:

  1. producer_byte_rate=1024,consumer_byte_rate=2048,request_percentage=200三项并不是都需要配置,按需要配置
  2. 查看配置的时候,对于同一个客户端ID,既在客户端ID级别配置了,又在(user, client-id)级配置,查看的时候,也是分开查看。(user, client-id)级配置只能看到(user, client-id)级的配置。客户端ID级别配置只能看到客户端ID级别配置。

官方文档(中文版)

推荐查看:

Kafka 中文文档 - ApacheCN

以上是关于kafka的客户端限流(资源配额)的主要内容,如果未能解决你的问题,请参考以下文章

关于Kafka配额的讨论

关于Kafka配额的讨论

服务限流,怎么计算配额?

Kafka限流

服务限流,怎么计算配额?

服务限流,怎么计算配额?