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

相关推荐
Mr_wilson_liu6 小时前
往kafka创建生产者和消费者,并且打数据和消费数据
kafka
koping_wu7 小时前
【Kafka】架构原理、消息丢失、重复消费、顺序消费、事务消息
分布式·架构·kafka
熊文豪7 小时前
Windows安装Apache Kafka保姆级教程(图文详解+可视化管理工具)
windows·kafka·apache
小醉你真好7 小时前
16、Docker Compose 安装Kafka(含Zookeeper)
docker·zookeeper·kafka
小醉你真好13 小时前
Spring Boot + Kafka 全面实战案例
spring boot·kafka·linq
沉默终止17 小时前
Kafka Queue: 如何严格控制消息数量
kafka
AutoMQ18 小时前
重磅发布|AutoMQ v1.6.0 开源版:Kafka 成本直降 17 倍,原生支持 Strimzi 与 Iceberg
云原生·kafka
吹晚风吧1 天前
从0开始了解kafka《第二篇 kafka的安装、管理和配置》
kafka·kafka配置
Jabes.yang1 天前
Java面试场景:从Spring Web到Kafka的音视频应用挑战
大数据·spring boot·kafka·spring security·java面试·spring webflux
板凳坐着晒太阳1 天前
Flink-Kafka 连接器的 Checkpoint 与 Offset 管理机制
flink·kafka·offset·checkpoint