Kafka的灵魂伴侣Logi-KafkaManger(2)之kafka针对Topic粒度的配额管理(限流)

举报
石臻臻的杂货铺 发表于 2021/07/29 19:08:16 2021/07/29
【摘要】 推荐一款非常好用的kafka管理平台,kafka的灵魂伴侣 滴滴开源Logi-KafkaManager 一站式Kafka监控与管控平台 @[TOC]项目地址: didi/Logi-KafkaManager: 一站式Apache Kafka集群指标监控与运维管控平台本文主要是讲解 针对Topic生产/消费 的限流配置; 如果不需要设置限流 则可忽略; 申请配额(限流)不了解kafak配额管理...

推荐一款非常好用的kafka管理平台,kafka的灵魂伴侣

滴滴开源Logi-KafkaManager 一站式Kafka监控与管控平台



@[TOC]

项目地址: didi/Logi-KafkaManager: 一站式Apache Kafka集群指标监控与运维管控平台

本文主要是讲解 针对Topic生产/消费 的限流配置; 如果不需要设置限流 则可忽略;

申请配额(限流)

不了解kafak配额管理机制的可以先了解一下 kafka中的配额管理(限速)机制

默认创建完Topic之后是没有设置配额信息的,而且我们都知道Kafka的配额(限流)只支持三种粒度:

user + clientid
user
clientid
如果kafka集群没有开启身份认证,则只能使用clientid方式来进行限流。

但是KaFkaManager是可以支持到Topic粒度的; 假如你对kafka配额机制原理非常清楚的话,那么你就很容易理解KM是怎么实现的了: 一言以蔽之, clientid+topic组成一个单独的clientId

当你需要对Topic限流的时候 就需要做如下操作了;

  1. 研发/运维 选中Topic点击申请配额
    在这里插入图片描述

  2. 运维人员 审核 申请配额的申请
    在这里插入图片描述

  3. 审核通过, 限流信息已经写入到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的格式; 然后不停的发送

 @Test
    void contextLoads() {

            Properties props = new Properties();
            props.put("bootstrap.servers", "xxxxx");
            props.put("acks", "all");
            props.put("retries", 0);
            props.put("batch.size", 16384);
            props.put("linger.ms", 1);
            props.put("buffer.memory", 33554432);
            props.put("client.id", "appId_000001_cn.Test2");
            props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
            props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
            Producer<String, String> producer = new KafkaProducer<>(props);
            for(int i = 0; i < 50000000; i++){
                producer.send(new ProducerRecord<String, String>("Test2", Integer.toString(i), Integer.toString(i)));
            }
            producer.close();

    }

检查是否发生限流
在这里插入图片描述
然后发现生产消息就被限流了;

这里的申请配额通过之后,实际上是去zk上更新了配置输入; 比如我申请配额为1M/s = 1024*1024=1048576kb

在这里插入图片描述

可以看到zk上的配置更新了

kafka-gatway 是滴滴内部未开源的kafka引擎,目前看来没有开源的打算,现在是作为企业服务,大概了解了下 新增的功能还是挺多的,配合Logi-KafkaManager使用效果比较好

专栏文章列表

Kafka的灵魂伴侣Logi-KafkaManger(1)之集群的接入及相关概念讲解

Kafka的灵魂伴侣Logi-KafkaManger(2)之kafka针对Topic粒度的配额管理(限流)

Kafka的灵魂伴侣Logi-KafkaManger(3)之运维管控–集群列表

Kafka的灵魂伴侣Logi-KafkaManger(4)之运维管控–集群运维(任务迁移和集群在线升级)


欢迎Star共建滴滴开源的kafka的管理平台,非常优秀非常好用的一款kafka管理平台
满足所有开发运维日常需求

滴滴开源Logi-KafkaManager 一站式Kafka监控与管控平台


图片替换文本
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200