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

相关推荐
宇之广曜8 小时前
从 MQ 到 Celery:把异步任务、状态表、重试补偿和 Outbox 一次讲清楚
kafka·rabbitmq
苍煜9 小时前
Kafka消息零丢失核心全解:生产者acks机制+消费者offset机制
分布式·kafka
敖正炀14 小时前
Kafka 安全机制:SASL 认证、SSL 加密与 ACL 授权
kafka
敖正炀16 小时前
Kafka 特性全景与选型指南
kafka
乐之者v21 小时前
Kafka 跨服数据同步
分布式·kafka
富士康质检员张全蛋1 天前
Kafka 消息查找流程和消息读取流程
分布式·kafka
深蓝轨迹1 天前
Kafka入门教程--帮你理清所有概念和细节
分布式·zookeeper·kafka
小尘要自信1 天前
Kafka 从原理到实践:分区副本机制、生产消费可靠性、以及如何避开那些年踩过的坑
分布式·kafka
苍煜2 天前
Kafka vs RocketMQ 生产环境选型指南
分布式·kafka·rocketmq
_Evan_Yao3 天前
内存映射文件与零拷贝:Kafka、RocketMQ 飞升的秘密通道
分布式·kafka·rocketmq