竹笋

首页 » 问答 » 环境 » SpringKafka之如何批量给top
TUhjnbcbe - 2023/10/24 19:03:00
白癜风医疗 https://mjbk.familydoctor.com.cn/bjbdfyy_zx/

前言

最近业务开发部门给我们部门提了一个需求,因为他们开发环境和测试环境共用一套kafka,他们希望我们部门能帮他们实现自动给kafka的topic加上环境前缀,比如开发环境,则topic为dev_topic,测试环境,则topic为test_topic,他们kafka客户端是使用spring-kafka。一开始接到这个需求的时候,我心里是拒绝的,为啥开发环境和测试环境不分别部署一套kafka,还要那么麻烦。但老大都答应接这个需求了,作为小罗罗也只能接了

实现思路

1、生产者端

可以通过生产者拦截器,来给topic加前缀

2、实现步骤

a、编写一个生产者拦截器

b、配置拦截器

c、测试

2、消费者端

这个就稍微有点难搞了,因为业务开发部门他们是直接用

KafkaListener的注解,形如下

KafkaListener(id=msgId,topics={Constant.TOPIC})

像这种也没啥好的办法,就只能通过源码了,通过源码可以发现在如下地方

KafkaListenerAnnotationBeanPostProcessor#postProcessAfterInitialization

会把

KafkaListener的值赋值给消费者,如果对spring有了解的朋友,可能会知道postProcessAfterInitialization是spring后置处理器的方法,主要用来bean初始化后的一些操作,既然我们知道

KafkaListener会在bean初始化后再进行赋值,那我们就可以在bean初始化前,修改掉

KafkaListener的值。具体实现如下

测试

总结

虽然实现了动态修改topic,但我还是觉得topic不要随便改变,有条件的话,kafka还是得基于物理环境隔离,其次真的客观条件不允许,要动态变更topic,则需做好topic动态变更宣导以及相关wiki的编写,不然很容易掉坑

1
查看完整版本: SpringKafka之如何批量给top