导读:背景:有智慧城市本地客户询问kafka是否可以控制业务消费方的消费速率,与他们详细对接后,发现了原因:他们的业务读取Kafka数据,在堆内存中做了一层缓存,在缓存中的数据进行下游处理;其实这种做法是没有问题的。在某些场景中,为了提高并发消费能力(并且不想增加主题分区的数量)
配额管理,配额管理是什么意思
背景
某智慧城市局点客户咨询Kafka能不能控制下业务consumer消费的速率,跟他们详细对接了解后,才搞清楚事情的缘由:他们业务读取kafka数据,在堆内存做了一层缓存,下游处理缓存中数据;其实这种做法也没问题,有些场景为了提高并发消费能力(又不想增加topic分区数目),会做一层缓存,然后使用多线程处理缓存数据。客户的问题在于:缓存大小没有限制,下游处理能力又有限,随着缓存增大,进程OOM,已经上线的业务,无法修改代码。
他们想通过Kafka限制下业务consumer的速率,小于等于缓存下游的处理能力。本文主要介绍Kafka配额的基本概念、实战操作演示等内容。
Kafka配额
为了控制clients(producers、consumers)使用的broker资源,broker能够对clients请求强制执行配额,配额类型分为两种:网络带宽配额(byte-rate)、请求速率配额(网络和IO线程的CPU利用率)。网络带宽限额以byte rate阈值衡量,配额的作用范围是per-broker级别的。
请求速率配额以一个配额窗口内、处理client请求的网络线程和IO线程CPU使用率衡量。
配额的必要性:生产者或者消费者很可能生产或者消费大量数据、也很可能发起非常高频率的生产或者消费请求,垄断broker资源,导致网络瓶颈(无法响应其他clients/brokers请求),产生雪崩现象。配额限制可以规避上述问题,尤其在大型多租户集群中更为重要。
配额支持粒度:user、client-id、(user,client-id),相同粒度内的所有连接共享配额。举例说明下,如果client=cli1设置了produce配额为10MB/s,那么所有使用client=cli1的应用共享10MB/s的配额。
配额优先级
1->8 优先级依次降低
Client配额实战
指定client配额
[root@felixzh1 bin]# ./kafka-configs.sh --bootstrap-server felixzh1:9092 --alter --add-config "producer_byte_rate=1024000" --entity-type clients --entity-name cli1
默认client配额
[root@felixzh1 bin]# ./kafka-configs.sh --bootstrap-server felixzh1:9092 --alter --add-config "producer_byte_rate=2048000" --entity-type clients --entity-default
查看结果
[root@felixzh1 bin]# ./kafka-configs.sh --bootstrap-server felixzh1:9092 --describe --entity-type clients
指定client压测
[root@felixzh1 bin]# ./kafka-producer-perf-test.sh --producer-props bootstrap.servers=felixzh1:9092 client.id=cli1 --topic test --throughput -1 --num-records 100000000000 --record-size 1
默认client压测
[root@felixzh1 bin]# ./kafka-producer-perf-test.sh --producer-props bootstrap.servers=felixzh1:9092 --topic test --throughput -1 --num-records 100000000000 --record-size 1
PLAIN用户配额实战
注意:kafka集群需要开启PLAIN认证,请自行查阅资料开启
指定PLAIN用户配额
[root@felixzh1 bin]# ./kafka-configs.sh --bootstrap-server felixzh1:9092 --alter --add-config "producer_byte_rate=2048000" --entity-type users --entity-name alice --command-config plain.properties
查看结果
[root@felixzh1 bin]# ./kafka-configs.sh --bootstrap-server felixzh1:9092 --describe --entity-type users --command-config plain.properties
指定PLAIN用户压测
[root@felixzh1 bin]# ./kafka-producer-perf-test.sh --producer-props bootstrap.servers=felixzh1:9092 --topic test1 --throughput -1 --num-records 100000000000 --record-size 1 --producer.config plain.properties注意:用户信息在plain.properties内
结论
通过上述实战演示,Kafka配额支持client.id、users(开启认证的集群),有需要的朋友,可以深入研究,实战体验。
总结:以上内容就是对于配额管理,配额管理是什么意思的详细介绍,文章内容部分转载自互联网,希望对您了解配额管理有帮助和参考的价值。
版权声明
本站搜集来源于网络,如侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。