Kafka的灵魂伴侣Logi-KafkaManger(2)之kafka针对Topic粒度的配额管理(限流)
kafka管控推荐使用 滴滴开源 的 Kafka运维管控平台 更符合国人的操作习惯 ,
更强大的管控能力 ,更高效的问题定位能力 、更便捷的集群运维能力 、更专业的资源治理 、 更友好的运维生态
本文主要是讲解 针对Topic生产/消费 的限流配置; 如果不需要设置限流 则可忽略;
申请配额(限流)
不了解kafak配额管理机制的可以先了解一下 kafka中的配额管理(限速)机制
默认创建完Topic之后是没有设置配额信息的,而且我们都知道Kafka的配额(限流)只支持三种粒度:
user + clientid
user
clientid
如果kafka集群没有开启身份认证,则只能使用clientid方式来进行限流。
但是KaFkaManager是可以支持到Topic粒度的; 假如你对kafka配额机制原理非常清楚的话,那么你就很容易理解KM是怎么实现的了: 一言以蔽之, clientid+topic组成一个单独的clientId
当你需要对Topic限流的时候 就需要做如下操作了;
研发/运维
选中Topic点击申请配额运维人员
审核 申请配额的申请审核通过, 限流信息已经写入到Zookeeper中;
针对Topic粒度的配额如何生效的
我们来简单看看KafakaManager申请配额的代码
从代码中我们可以看到, 我们写入到 zk中的配额clients节点路径是 apppId.TopicName; 想要让配额生效, 那么我们在生产和消费Topic的时候, clientId 需要设置为apppId.TopicName
的格式; 一个topic单独分配一个clientId; 这样看起来想要使用这个功能是不是还挺麻烦;但是滴滴的 kafka-gateway 帮我们实现了这个功能;
kafka-gateway: 这个是滴滴内部针对社区版kafka做了一些扩展,增强; 比如这个功能,kafka-gateway
就帮我们自动解决了,不需要那么麻烦
当然我们也可以不用kafka-gateway,在每个Topic生产/消费那里根据上门的规则单独设置clientId
测试kafka限流是否成功
我们将Topic Test2
的生产限流设置为0.000001
然后写一段发送消息的代码, 设置client.id = apppId.TopicName
的格式; 然后不停的发送
1 |
|
检查是否发生限流
然后发现生产消息就被限流了;
这里的申请配额通过之后,实际上是去zk上更新了配置输入; 比如我申请配额为1M/s = 1024*1024=1048576kb
可以看到zk上的配置更新了
kafka-gatway 是滴滴内部未开源的kafka引擎,目前看来没有开源的打算,现在是作为企业服务,大概了解了下 新增的功能还是挺多的,配合Logi-KafkaManager使用效果比较好
作者石臻臻,工作8年的互联网老兵,丰富的开发和管理经验,全网「 粉丝数4万 」,
先后从事 「 电商 」、「 中间件 」、「 大数据」 等工作
现在任职于「 滴滴技术专家 」岗位,从事开源建设工作
目前在维护 个人公众号「 石臻臻的杂货铺 」 ; 关注公众号会有「 日常送书活动 」;
欢迎进「 高质量 」 「 滴滴开源技术答疑群 」 , 群内每周技术专家轮流值班答疑
可帮忙「 内推 」一二线大厂