【问题标题】:Consuming multiple kafka topics in the same consumer class在同一个消费类中消费多个 kafka 主题
【发布时间】:2019-09-26 04:58:00
【问题描述】:

我有一个 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

【问题讨论】:

  • 你能显示消费者配置代码吗
  • 我其实没有consumerConfig。我只有一个标有服务注释的类,其中我有两个带有 KafkaListener 注释的方法。我需要加载一些特殊的消费者 bean 吗?
  • 至少可以显示application.ymlapplication.properties中的属性
  • 当然。我刚刚用与 kafka 相关的 application.yml 部分编辑了我的帖子。请看一下

标签: apache-kafka spring-kafka


【解决方案1】:
  • 创建多个主题的目的是为了传播数据,并且
    随后,跨多个处理数据
    核心/进程/线程。

  • 即便如此,您也可以从一个消费者开始,用于多个 主题,直到在处理队列中的事件时观察到延迟。 然后你就可以把它们分开了。

【讨论】:

  • 你如何将它们分开,因为我想将它们分开。
  • 您的第一种方法就是这样做的!每个 kafkalistener 都是一个单独的容器,它使用自己的线程运行/可以配置为并发
  • 是否有理由为此用例使用 concurrentKafkaListenerContainerFactory 或 consumerFactory ?
  • 当每个主题有多个分区并希望每个分区注册一个消费者时,您可以使用并发KafkaListenerContainerFactory
  • 最后一个问题。我应该从不同的消费者群体中消费这些主题,还是同一个消费者群体不会受到伤害?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-10
  • 2017-02-23
  • 2020-03-19
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多