关于@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 小时前
06-15-A-Kafka生态集成与流处理详解
分布式·kafka
做个文艺程序员2 小时前
MinIO第05篇:MinIO事件通知机制与Kafka集成——构建SaaS平台的异步文件处理管道
kafka·消息队列·springboot·minio·事件驱动·异步处理
天空鸟_时光不老4 小时前
07-检查点与状态持久化
java·人工智能·spring boot·spring·spring cloud·kafka·maven
此时不提桶,更待何时5 小时前
06-13-A-Kafka客户端与协议深入详解
分布式·kafka
初见月1 天前
ISR机制保障数据一致性
kafka
筑梦之路3 天前
docker-compose方式部署kafka集群(Kraft方式)——筑梦之路
docker·容器·kafka
用户1494484813205 天前
同为消息队列,RocketMQ 和 Kafka 的底层设计差在哪?
kafka
开开心心就好5 天前
办公软件卸载不干净?专用工具一键清残留
java·前端·人工智能·智能手机·kafka·excel·memcache
ly76896 天前
ISR 收缩与 HW 推进:副本同步的边界条件与 UnderReplicated 排障
数据库·kafka·c#·linq·isr·hw·副本同步
此时不提桶,更待何时8 天前
06-09-A-Kafka架构与存储原理详解
架构·kafka·linq