关于@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注解;

相关推荐
张小凡vip20 小时前
Spring Boot集成Kafka完整版
spring boot·kafka·linq
Devin~Y21 小时前
智慧物流+AIGC客服Java大厂面试:Spring Boot、Kafka、Redis、JVM与RAG Agent实战
java·jvm·spring boot·redis·spring cloud·kafka·rag
小楼v1 天前
Kafka消息队列安装步骤及从0入门到基础核心掌握
java·kafka·消息队列·教程·安装
笑尘~Y2 天前
Kafka核心技术解析
kafka
江华森2 天前
Kafka 从入门到精通 — 完整学习笔记
笔记·学习·kafka
Irene19912 天前
(课堂笔记)Kafka + Flume 完整实战
kafka·flume
Irene19912 天前
Kafka + Flume 实操详情记录(略繁琐,包含错误和排查记录)
kafka·flume
JAVA面经实录9172 天前
Kafka 全套学习知识手册
java·kafka
是小王同学啊~3 天前
Kafka 面试通关笔记:高频八股 + 生产实战 + 追问链路(上)
笔记·面试·kafka
Devin~Y3 天前
从内容社区到AIGC客服:Spring Boot、Redis、Kafka、K8s、RAG的三轮大厂Java面试对话(附标准答案)
java·spring boot·redis·spring cloud·kafka·kubernetes·micrometer