在春季从多线程kafkalisteners消费onetopic

时间:2020-10-19 14:01:04

标签: spring apache-kafka spring-kafka

您好,我有一个主题,我在春季使用@KafkaListener批注来消耗此主题的消息 我想从多线程侦听器中使用主题,如何实现呢?

ConcurrentKafkaListenerContainerFactory中有一个属性可以设置并发性,但这是正确的方法吗? ConcurrentKafkaListenerContainerFactory.setConcurrency(3),一个侦听器和三个不同的线程消耗一个主题?

2 个答案:

答案 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中的并发值覆盖。