【发布时间】: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.yml或application.properties中的属性 -
当然。我刚刚用与 kafka 相关的 application.yml 部分编辑了我的帖子。请看一下