在同一个消费者类别中消费多个kafka主题

时间:2019-05-08 12:41:45

标签: apache-kafka spring-kafka

我有一个spring boot项目,我是spring-kafka,可以连接到基础的kafka事件中心。

我必须在同一个消费者类别中收听2个不同的主题。我有两种方法可以做到这一点。

一种是有两个这样的kafka监听器:

 @KafkaListener(topics = "topic1")
public void consumeTopic1(String message) throws Exception {  
   //do something
  }

 @KafkaListener(topics = "topic2")
public void consumeTopic2(String message) throws Exception {  
   //do something
  }

另一种方法是像这样在同一kafkaListener中包含2个主题

 @KafkaListener(topics = {"topic1", "topic2"})
public void consumeTopics(String message) throws Exception {  
   //do something
  }

由于我是kafka的新手,所以我不确定这两种方法之间的区别是什么。哪个是性能优异且资源有效的。

我想知道的一件事是,它会在两种方法中的一个线程上同时听两个话题,还是会产生一个线程来监听这些话题。

使用方法1,我在与消费者的交流中遇到麻烦,因为我发现在使用该主题方面有些延误。

请根据我的经验向我推荐,因为我对kafka还是很陌生

===============编辑======== Kafka属性在application.yml中,如下所示:

 kafka:
    properties:
      topics:
        topic1: topic1
        topic2: topic2
    bootstrap-servers: server1,server2
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
      retries: 4
    consumer:
      group-id: mygroupid
      auto-offset-reset: latest
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

1 个答案:

答案 0 :(得分:0)

  • 创建多个主题的目的是传播数据,并且
    随后,跨多个数据处理
    核心/进程/线程。

  • 即使如此,您也可以从单个消费者开始 主题,直到在处理队列中的事件时观察到延迟为止。 然后,您可以将它们分开。