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

相关推荐
亲爱的非洲野猪3 小时前
Kafka消息积压全面解决方案:从应急处理到系统优化
分布式·kafka
prince0515 小时前
Kafka 生产者和消费者高级用法
分布式·kafka·linq
菜萝卜子16 小时前
【Project】基于kafka的高可用分布式日志监控与告警系统
分布式·kafka
csdn_aspnet16 小时前
在 Windows 上安装和运行 Apache Kafka
windows·kafka
真实的菜2 天前
Kafka生态整合深度解析:构建现代化数据架构的核心枢纽
架构·kafka·linq
茫茫人海一粒沙3 天前
理解 Confluent Schema Registry:Kafka 生态中的结构化数据守护者
分布式·kafka
dessler3 天前
Kafka-消费者(Consumer)和消费者组(Consumer Group)
linux·运维·kafka
虚!!!看代码3 天前
【Kafka使用方式以及原理】
分布式·kafka
我科绝伦(Huanhuan Zhou)3 天前
Kafka日常运维命令总结
运维·分布式·kafka
找不到、了13 天前
kafka消费的模式及消息积压处理方案
java·kafka