关于@KafkaListener动态订阅消费topic的调研

@KafkaListener注解监听和消费kafka的代码通常如下:

java 复制代码
@KafkaListener(topics = "#{'${topics}'.split(',')}")
public void onMessage(List<ConsumerRecord<String, String>> records) {
	try {
		final List<String> msgs = records.stream().map(ConsumerRecord::value).collect(Collectors.toList());
		msgs.forEach(this::processRecord);
	} catch (Exception e) {
		log.error("KafkaListener_kafka_consume_error.", e);
	}
}

现在的问题是:在程序运行的过程中改变topic,消费者能否自动去订阅和消费修改后的topic ?

遗憾的是,@KafkaListener不具备该能力。程序启动时,会根据@KafkaListener的配置信息初始化消费者并订阅指定的topic。程序运行过程中修改topic,系统不会自动重新读取配置并订阅修改后的topic; 鉴于此,考虑使新topic生效的方法是:

1、修改topic后,重启消费程序;

2、使用Kafka原生客户端,手动初始化消费者并启动消费者线程。在消费者线程中,循环从nacos、redis等第三方数据源获取topic信息,与当前topic比较,如有变化则重新初始化消费者、重新订阅topic;其中,从nacos中获取topic信息可考虑使用@RefreshScope注解;

相关推荐
9***Y486 小时前
后端在分布式中的Apache Kafka
分布式·kafka
yumgpkpm6 小时前
腾讯TBDS和Cloud Data AI CMP 比较的缺陷在哪里?
hive·hadoop·elasticsearch·zookeeper·spark·kafka·hbase
小小工匠7 小时前
大规模数据处理:12_Kappa架构剖析与Kafka在大规模流式数据处理中的应用实践
架构·kafka·kappa
西岭千秋雪_7 小时前
Kafka服务端日志梳理
java·分布式·zookeeper·kafka
2501_941148157 小时前
跨语言分布式AI平台建设与实践:Python、Java、C++、Go深度探索
kafka·rabbitmq
笨手笨脚の7 小时前
Kafka-3 Kafka 中的生产者
kafka·消息队列·事务·幂等·生产者·分区选择算法
lhyzws15 小时前
CENTOS上的网络安全工具(三十二) Portainer Kafka-Clickhouse部署(1)
linux·kafka·centos
Sinowintop2 天前
易连EDI-EasyLink无缝集成之消息队列Kafka
分布式·网络协议·kafka·集成·国产化·as2·国产edi
佛祖让我来巡山2 天前
Kafka入门:从初识到Spring Boot实战
kafka·kafka入门·kafka案例
二进制_博客2 天前
eventTime+watermarker+allowedLateness到底窗口关闭时间是什么?
flink·kafka