写点什么

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

  • 2022-12-31
    江西
  • 本文字数:1990 字

    阅读完需:约 7 分钟

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

推荐一款非常好用的 kafka 管理平台,kafka 的灵魂伴侣 滴滴开源Logi-KafkaManager 一站式Kafka监控与管控平台


1 技术交流

有想进滴滴 LogI 开源用户群的加我个人微信: jjdlmn_进群(备注:进群)群里面主要交流 kakfaesagentLogI-kafka-manager、等等相关技术;群内有专人解答你的问题对~ 相关技术领域的解答人员都有; 你问的问题都会得到回应

有想进 滴滴 LogI 开源用户群 的加我个人微信: jjdlmn_ 进群(备注:进群)群里面主要交流 kakfa、es、agent、以及其他技术群内有专人解答疑问,你所问的都能得到回应


@

  • 技术交流

  • 申请配额(限流)针对 Topic 粒度的配额如何生效的测试 kafka 限流是否成功

  • 专栏文章列表


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

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

2 申请配额(限流)

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

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

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

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

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

  1. 研发/运维 选中 Topic 点击申请配额


  1. 运维人员 审核 申请配额的申请


  1. 审核通过, 限流信息已经写入到 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 使用效果比较好

3 专栏文章列表

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

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

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

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


欢迎 Star 和共建由滴滴开源的 kafka 的管理平台,非常优秀非常好用的一款 kafka 管理平台

满足所有开发运维日常需求


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

欢迎加个人微信拉你进开发技术交流群,群内专人解答技术疑问(请备注:技术)wx: jjdlmn_或 wx: mike_zhangliang



发布于: 2022-12-31阅读数: 48
用户头像

关注公众号: 石臻臻的杂货铺 获取最新文章 2019-09-06 加入

进高质量滴滴技术交流群,只交流技术不闲聊 加 szzdzhp001 进群 20w字《Kafka运维与实战宝典》PDF下载请关注公众号:石臻臻的杂货铺

评论

发布
暂无评论
Kafka的灵魂伴侣Logi-KafkaManger(2)之kafka针对Topic粒度的配额管理(限流)_kafka_石臻臻的杂货铺_InfoQ写作社区