У меня есть проект весенней загрузки, и я подключился к базовому центру событий 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, подобном этому
@KafkaListener(topics = {"topic1", "topic2"})
public void consumeTopics(String message) throws Exception {
//do something
}
Поскольку я новичок в kafka, я не уверен, в чем разница между этими двумя подходами.Какой из них эффективен и эффективен с точки зрения ресурсов.
Одна вещь, которая меня интересует, заключается в том, чтобы он слушал обе темы в одном потоке в обоих подходах или порождал бы каждый поток для прослушивания этих тем.
Используя подход 1, у меня возникли проблемы с потребителем, когда я вижу некоторые задержки в потреблении тем.
Пожалуйста, предложите мне, основываясь на вашем опыте, так как я довольно новичок в kafka
=============== EDIT ======== Свойства 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