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

相关推荐
阿坤带你走近大数据4 小时前
如何保证kafka中的数据一致性
分布式·kafka
阿坤带你走近大数据5 小时前
Kafka中的分区概念
分布式·kafka
爱吃牛肉的大老虎8 小时前
Kafka集群之抛弃 Zookeeper
分布式·zookeeper·kafka
Solis程序员9 小时前
Kafka 灾难回放机制:基于事件事实流的计数全量恢复方案
分布式·kafka
Elias不吃糖10 小时前
RabbitMQ vs Kafka 简单总结
java·分布式·kafka·rabbitmq
Lyyaoo.10 小时前
kafka消息的可靠性及幂等性
分布式·kafka
折哥的程序人生 · 物流技术专研1 天前
《Java 100 天进阶之路》第95篇:消息队列基础(RocketMQ/Kafka)(2026版)
java·面试·kafka·rocketmq·java-rocketmq·求职招聘
彼岸星光ぐ>1 天前
Windows系统下Kafka KRaft模式配置与启动教程
kafka
梦想的颜色2 天前
Kafka内核解密:架构拓扑、数据流转与生产消费模型的深度剖析
kafka·高并发·多线程·异步·消息组件·生产者与消费者模式
洛水水2 天前
消息队列与Kafka详解
分布式·kafka