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

相关推荐
沧海寄馀生20 小时前
Apache Hadoop生态组件部署分享-Kafka
大数据·hadoop·分布式·kafka·apache
华大哥21 小时前
linux 安装Kafka 和springboot kaka实战
分布式·kafka·springboot
梦里不知身是客1121 小时前
flink从kafka读取数据
flink·kafka·linq
脸大是真的好~21 小时前
尚硅谷-Kafka01-介绍-安装-ZK和Broker工具-Kafka系统架构-启动和竞争管理者controller
分布式·kafka·系统架构
失伟2 天前
CDC(数据变更捕获)场景应用
mongodb·elasticsearch·kafka·kafka-connect
Msshu1232 天前
Type-C PD快充协议 PD快充诱骗协议芯片 PD/QC/FCP/SCP/AFC电压诱骗芯片
mongodb·zookeeper·eureka·kafka·consul
失伟2 天前
kafka教程(新手使用单机版)
分布式·kafka
java_logo2 天前
Apache Kafka Docker 容器化部署指南
运维·docker·云原生·容器·kafka·kubernetes·apache
写bug的小屁孩2 天前
5.Kafka-HW重要特性与场景分析
分布式·中间件·kafka
写bug的小屁孩2 天前
3.Kafka-数据存储流程
分布式·中间件·kafka