我有一个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
答案 0 :(得分:0)
创建多个主题的目的是传播数据,并且
随后,跨多个数据处理
核心/进程/线程。
即使如此,您也可以从单个消费者开始 主题,直到在处理队列中的事件时观察到延迟为止。 然后,您可以将它们分开。