kafka中的配额管理机制

发布时间:2025-12-09 11:50:01 浏览次数:1

#1. 配置user+clientid。例如,针对”user1”,”clientA”的配额是10MB/sec,其它clientid的默认配额是5MB/sec。znode: ${kafka_rootdir}/config/users/user1/clients/clientid; value: {"version":1,"config":{"producer_byte_rate":"10485760","consumer_byte_rate":"10485760"}}znode: {kafka_rootdir}/config/users/user1/clients/<default>; value: {"version":1,"config":{"producer_byte_rate":"5242880","consumer_byte_rate":"5242880"}}#2. 配置user。例如,”user2”的配额是1MB/sec,其它user的默认配额是5MB/sec。znode: ${kafka_rootdir}/config/users/user1; value: {"version":1,"config":{"producer_byte_rate":"1048576","consumer_byte_rate":"1048576"}}znode: ${kafka_rootdir/config/users/<default>; value: {"version":1,"config":{"producer_byte_rate":"5242880","consumer_byte_rate":"5242880"}}#3. 配置client-id。例如,”clientB”的配额是2MB/sec,其它clientid的默认配额是1MB/sec。znode:${kafka_rootdir}/config/clients/clientB'; value:{“version”:1,”config”:{“producer_byte_rate”:”2097152”,”consumer_byte_rate”:”2097152”}}</li>znode:${kafka_rootdir}/config/clients/; value:{“version”:1,”config”:{“producer_byte_rate”:”1048576”,”consumer_byte_rate”:”1048576”}}`

3 优先级
首先,我们需要明白,kafka在管理配额的时候,是以“组”的概念来管理的。而管理的对象,则是producer或consumer到broker的一条条的TCP连接。

那么在进行额度管理的时候,kafka首先需要确认,这条连接属于哪个“组”,进而确定当前连接是否超过了所属“组”的总额度。

在进行“组”判定的时候,依照以下的优先级顺序依次判定:

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>

一旦找到了符合的“组”,即中止判定过程。

4 超额处理

如果连接超过了配额值会怎么样呢?kafka给出的处理方式是:延时回复给业务方,不使用特定返回码

具体到producer还是consumer,处理方式又有所不同:

  • Producer:如果Producer超额了,先把数据append到log文件,再计算延时时间,并在ProduceResponse的ThrottleTime字段填上延时的时间(v2,只在0.10.0版本以上支持)。
  • Consumer:如果Consumer超额了,先计算延时时间,在延时到期后再去从log读取数据并返回给Consumer。否则无法起到限制对文件系统的读蜂拥。在v1(0.9.0以上版本)和v2版本的FetchResponse中有ThrottleTime字段,表示因为超过配额而延时了多久
quatas
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477