0

I have upgraded spring boot version from 2.5.3 to 2.5.5 which has upgraded this libraries.

spring-kafka         : from 2.7.4 to 2.7.7
spring-kafka-test    : from 2.7.4 to 2.7.7
kafka-clients        : from 2.7.1 to 2.8.1
spring-test          : from 5.3.9 to 5.3.10

with this upgrade, I started getting an error: java.lang.NoSuchMethodError:kafka.server.KafkaServer.(Lkafka/server/KafkaConfig; Lorg/apache/common/kafka/utils/Time;Lscala/Option;/Lscala/collection/Seq;)V

I had tried a lot with changing the version as required by compatibility matrix of spring docs https://spring.io/projects/spring-kafka

Any idea what could be the issue?

pom.xml (spring-boot 2.5.5)

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
        <version>2.7.7</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka-test</artifactId>
        <version>2.7.7</version>
    </dependency>
    <dependency>
        <groupId>io.confluent</groupId>
        <artifactId>kafka-connect-replicator</artifactId>
        <version>5.3.4</version>
        <scope>runtime</scope>
        <exclusions>
          <exclusion>
           <groupId>org.apache.kafka</groupId>
           <artifactId>kafka_2.11</artifactId>
          </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>io.confluent</groupId>
        <artifactId>kafka-avro-serializer</artifactId>
        <version>5.5.1</version>
        <exclusions>
          <exclusion>
           <groupId>org.apache.kafka</groupId>
           <artifactId>kafka-clients</artifactId>
          </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <scope>test</scope>
</dependency>
usr_11
  • 548
  • 10
  • 31
  • Can you share your full pom or gradle? – OneCricketeer Oct 17 '21 at 13:47
  • @OneCricketeer I have added pom. please check. – usr_11 Oct 17 '21 at 14:52
  • You shouldn't add explicit versions for spring dependencies. If you do, then yes, you'll get errors. They should mostly all be inherited from your starter or parent pom. In particular, though your Kafka Connect (Replicator) dependency is excluding the broker server package that has the class that cannot be found – OneCricketeer Oct 18 '21 at 13:48
  • There is no something like `spring-kafka-clients`. And probably your `kafka-connect-replicator` pulls that Apache Kafka `2.8` for you. – Artem Bilan Oct 18 '21 at 13:51
  • When overriding any versions that Boot prescribes, you must override them for all related jars - see https://docs.spring.io/spring-kafka/docs/current/reference/html/#update-deps It's best, however, to just let boot handle the dependency versions. – Gary Russell Oct 18 '21 at 17:59

1 Answers1

2

Whenever you specify a version for kafka-clients rather than letting boot prescribe the version; you must also override the versions of the kafka jars used by the embedded broker.

https://docs.spring.io/spring-kafka/docs/current/reference/html/#update-deps

Gary Russell
  • 166,535
  • 14
  • 146
  • 179