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

相关推荐
小的~~11 小时前
CentOS7安装CDH6.3.2
hive·hdfs·kafka
Devin~Y20 小时前
电商AIGC智能客服面试:JVM调优、Spring Cloud微服务、Redis缓存、Kafka消息、K8s观测与RAG落地
java·jvm·spring boot·redis·spring cloud·kafka·kubernetes
zhangzeyuaaa21 小时前
Kafka 单分区顺序消费的极限与突围:从原理到实战
分布式·kafka
观测云1 天前
观测云日志转发至 Kafka 最佳实践
kafka·日志
富士康质检员张全蛋2 天前
Kafka架构 数据发送保障
分布式·架构·kafka
WhoAmI2 天前
Elasticsearch实战指南:构建实时全文检索系统
elasticsearch·kafka
zhangzeyuaaa2 天前
Kafka 核心原理超通俗详解|Offset、消费组、分区、持久化一次讲透
分布式·kafka
隔壁阿布都2 天前
Kafka `acks` 参数取值全解
分布式·kafka
lvrongbao2 天前
Kafka 场景化面试题top5: 事务与分布式一致性
分布式·kafka
zhangzeyuaaa2 天前
深入剖析Kafka:Offset机制的底层基石——消息有序性
分布式·kafka