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

相关推荐
黄雪超1 天前
Kafka——Kafka 线上集群部署方案怎么做?
大数据·分布式·kafka
梦想画家2 天前
Kafka Schema Registry:数据契约管理的利器
kafka·schema registry
csdn_aspnet2 天前
在 Ubuntu 上安装和配置 Kafka
ubuntu·kafka
jiuweiC2 天前
spark3 streaming 读kafka写es
elasticsearch·kafka·linq
文艺倾年3 天前
【八股消消乐】浅尝Kafka性能优化
分布式·性能优化·kafka
CodeWithMe3 天前
【Note】《Kafka: The Definitive Guide》第11章:Stream Processing
分布式·kafka
dessler3 天前
Kafka-日常运维命令
linux·运维·kafka
csdn_aspnet3 天前
在 Docker 上安装和配置 Kafka、选择用于部署 Kafka 的操作系统
docker·kafka
CodeWithMe4 天前
【Note】《Kafka: The Definitive Guide》第四章:Kafka 消费者全面解析:如何从 Kafka 高效读取消息
分布式·kafka
csdn_aspnet4 天前
在 MacOS 上安装和配置 Kafka
macos·kafka