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

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

提示:本文可能已过期,请点击原文查看:Kafka的灵魂伴侣Logi-KafkaManger(2)之kafka针对Topic粒度的配额管理(限流)


文章目录

技术交流

申请配额(限流)

针对Topic粒度的配额如何生效的

测试kafka限流是否成功

专栏文章列表

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


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


申请配额(限流)

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


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


user + clientid

user

clientid

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


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


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


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


image.png

image.png

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

image.png

审核通过, 限流信息已经写入到Zookeeper中;

针对Topic粒度的配额如何生效的

我们来简单看看KafakaManager申请配额的代码

image.png

image.png

从代码中我们可以看到, 我们写入到 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

image.png

然后写一段发送消息的代码, 设置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();
    }

检查是否发生限流

image.png

然后发现生产消息就被限流了;

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

image.png

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

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

相关文章
|
8月前
|
消息中间件 存储 负载均衡
深入了解Kafka中Topic的神奇之处
深入了解Kafka中Topic的神奇之处
584 0
|
8月前
|
消息中间件 Kafka 流计算
Flink的分区表订阅功能是通过Kafka的topic分区来实现的
Flink的分区表订阅功能是通过Kafka的topic分区来实现的【1月更文挑战第6天】【1月更文挑战第26篇】
145 1
|
3月前
|
消息中间件 存储 分布式计算
大数据-53 Kafka 基本架构核心概念 Producer Consumer Broker Topic Partition Offset 基础概念了解
大数据-53 Kafka 基本架构核心概念 Producer Consumer Broker Topic Partition Offset 基础概念了解
102 4
|
4月前
|
消息中间件 Kafka Apache
kafka: invalid configuration (That topic/partition is already being consumed)
kafka: invalid configuration (That topic/partition is already being consumed)
|
6月前
|
消息中间件 存储 Kafka
深入理解Kafka核心设计及原理(四):主题管理
深入理解Kafka核心设计及原理(四):主题管理
97 8
|
8月前
|
消息中间件 大数据 Kafka
记录一下Kafka报错:timeout expired while fetching topic metadata
记录一下Kafka报错:timeout expired while fetching topic metadata
677 0
|
6月前
|
消息中间件 监控 Kafka
查询Kafka集群中消费组(group)信息和对应topic的消费情况
查询Kafka集群中消费组(group)信息和对应topic的消费情况
3106 0
|
8月前
|
消息中间件 负载均衡 监控
【Kafka】Kafka 创建Topic后如何将分区放置到不同的 Broker 中?
【4月更文挑战第13天】【Kafka】Kafka 创建Topic后如何将分区放置到不同的 Broker 中?
|
8月前
|
消息中间件 存储 缓存
【Kakfa】Kafka 的Topic中 Partition 数据是怎么存储到磁盘的?
【4月更文挑战第13天】【Kakfa】Kafka 的Topic中 Partition 数据是怎么存储到磁盘的?
|
8月前
|
消息中间件 Kafka 数据处理
实时计算 Flink版产品使用合集之消费Kafka数据时,实现限流如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

热门文章

最新文章