Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I define two or more Kafka consumers using spring boot configurations?

I'm new to kafka. How can I define two(or more) Kafka consumers using configuration .properties or .yml? I'm interested in using the spring.kafka.* application's properties and also I would like to specify two different properties for two consumers using this configuration files. For example, consumerA will have spring.kafka.bootstrap-servers=localhost:9090 and consumerB spring.kafka.bootstrap-servers=localhost:9091. I have seen examples online using multiple @KafkaLister with a single application.yml where all the common properties of the @KafkaLister (consumer) beans are defined in application.yml. This is ok concept but in case there are more consumers and they have completely different configurations then all of the configs needs to be put in the @KafkaListener annotation and this will make the class long and hard to read and the .yml obsolete. Instead, I would like something like this:

spring:
  kafka:
    consumer1:
      auto-offset-reset: earliest
      spring.kafka.bootstrap-servers=localhost:9091
  kafka:
    consumer2:
      spring.kafka.bootstrap-servers=localhost:9092
      auto-offset-reset: latest
  kafka:
    consumer3:
      spring.kafka.bootstrap-servers=localhost:9093
      auto-offset-reset: latest

And also how would I then connect this configuration to the appropriate beans? I could surely define the consumer beans and then use my custom configuration files to create as many different consumers as I would like but it seems to me that I would be reinventing the wheel.

Thanks

like image 438
user1796624 Avatar asked Oct 18 '25 02:10

user1796624


1 Answers

No; you can't declare consumers like that, you have to use @KafkaListener annotations on methods or create listener containers/listeners yourself.

You can override the bootstrap servers in the listener itself...

@KafkaListener(... properties="bootstrap.servers:${some.property}")
void listen(...) {

}

You can programmatically make multiple consumers from user properties, using the technique described here...

Can i add topics to my @kafkalistener at runtime

like image 125
Gary Russell Avatar answered Oct 21 '25 19:10

Gary Russell



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!