对于quota的使用,官网给出了案例:https://kafka.apache.org/documentation/#quotas。

这里我们自己动手操作一下,加深理解。下面的指令基于个人主机设置,启动的kafka为zookeeper模式,zookeeper版本为:3.9.1,kafka版本为:3.9.0。

一、设置quota

1.给user或client-id设置quota
lansg:~/ $ kafka-configs --bootstrap-server 172.20.10.3:19115 --alter --add-config 'producer_byte_rate=1024' --entity-type users --entity-name user0

这时如果设置成功,我们会得到这样一条提示:

Completed updating config for user user0.

我们可以再查询一下进行确认

lansg:~/ $ kafka-configs --bootstrap-server 172.20.10.3:19115 --describe --entity-type users --entity-name user0

我们会得到如下返回结果:

Quota configs for user-principal 'user0' are producer_byte_rate=1024.0

这表示我们确实已经设置成功了。

注意⚠️:在 Kafka 中,当我们使用 --entity-type users --entity-name user0 设置配额时,不需要预先创建用户。这是因为 Kafka 的配额系统是独立运作的,它会为任何指定的用户名创建配额条目,而不需要这个用户实际存在。

2.同时给二者设置quota
lansg:~/ $ kafka-configs --bootstrap-server 172.20.10.3:19115 --alter --add-config 'consumer_byte_rate=2048' --entity-type users --entity-name user0 --entity-type clients --entity-name clientA
Completed updating config for user user0.

查询一下:

lansg:~/ $ kafka-configs --bootstrap-server 172.20.10.3:19115 --describe --entity-type users --entity-name user0 --entity-type clients --entity-name clientA
Quota configs for user-principal 'user0', client-id 'clientA' are consumer_byte_rate=2048.0

注意⚠️:这个设置表示同时满足 user=user0 且client-id=clientA时,设置才生效。

如果我们此时单独查询user0,那么仍然只有之前设置的’producer_byte_rate=1024.0′

lansg:~/ $ kafka-configs --bootstrap-server 172.20.10.3:19115 --describe --entity-type users --entity-name user0    [9:23:20]
Quota configs for user-principal 'user0' are producer_byte_rate=1024.0
3.给user或client-id设置default quota

例如给所有的user设置default quota:’request_percentage=200′

kafka-configs --bootstrap-server 172.20.10.3:19115 --alter --add-config 'request_percentage=200' --entity-type users --entity-default

注意⚠️:default quota只能设置在user层面或者client-id层面,但是无法针对单独的user或者client-id进行设置。
例如:我们可以给user设置default quota,这会应用于所有未设置quota的user(user0,user1…),但是我们无法为单独的user如user0设置default quota。client-id同理。

其次,如果我们给某个user(如user0)设置了quota(’producer_byte_rate=1024’),那么当我们给user设置default quota时,即使是不同的类型(’request_percentage=200’),但是不会对user0造成任何影响。因此我们会看到如下结果:

lansg:~/ $ kafka-configs --bootstrap-server 172.20.10.3:19115 --alter --add-config 'request_percentage=200' --entity-type users --entity-default
Completed updating default config for users in the cluster.

lansg:~/ $ kafka-configs --bootstrap-server 172.20.10.3:19115 --describe --entity-type users --entity-name user0    [9:51:03]
Quota configs for user-principal 'user0' are producer_byte_rate=1024.0
4.user和client-id,一个为default,一个为正常设置quota

Configure default client-id quota for user=userA:

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 user1 --entity-type clients --entity-default

上述的默认配额只在同时满足以下两个条件时生效:

  • user=user1
  • client-id没有设置配额

二、查询quota

1.查询指定quota

例如查询user=’user0’的quota:

lansg:~/ $ kafka-configs --bootstrap-server 172.20.10.3:19115 --describe --entity-type users --entity-name user0
Quota configs for user-principal 'user0' are producer_byte_rate=1024.0
2.查询默认quota

例如查询user的default quota:

lansg:~/ $ kafka-configs --bootstrap-server 172.20.10.3:19115 --describe --entity-type users --entity-default       [9:56:17]
Quota configs for the default user-principal are request_percentage=200.0