您好,我有一个主题,我在春季使用@KafkaListener批注来消耗此主题的消息 我想从多线程侦听器中使用主题,如何实现呢?
ConcurrentKafkaListenerContainerFactory中有一个属性可以设置并发性,但这是正确的方法吗? ConcurrentKafkaListenerContainerFactory.setConcurrency(3),一个侦听器和三个不同的线程消耗一个主题?
答案 0 :(得分:1)
是的,这将创建3个线程,但是该主题至少需要3个分区。您不能从单个分区消费将有多个消费者。
答案 1 :(得分:1)
如果您有多个侦听器,则将并发添加为@KafkaListener
的属性。例如,
@KafkaListener(id = "consumer1", topics = {"topic1","topic2"}, groupId = "group1", concurrency = "4")
public void consumeLog1(){
}
@KafkaListener(id = "consumer2", topics = {"topic2","topic3"}, groupId = "group1", concurrency = "5")
public void consumeLog2(){
}
consumer1
将创建4 KafkaConsumers
,而consumer2
将创建5 KafkaConsumers
。他们会听他们分配的主题。
如果只有一个@KafkaListener
,则将默认并发添加为属性。
spring.kafka.listener.concurrency=3
此值将被@KafkaListener
中的并发值覆盖。