【问题标题】:Upgrading to Spring boot to 2.5.5 creates issue with kafka libraries升级到 Spring Boot 到 2.5.5 会导致 kafka 库出现问题
【发布时间】:2023-04-01 10:09:01
【问题描述】:

我已将 Spring Boot 版本从 2.5.3 升级到 2.5.5,从而升级了这个库。

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

通过此升级,我开始收到错误消息: java.lang.NoSuchMethodError:kafka.server.KafkaServer.(Lkafka/server/KafkaConfig; lorg/apache/common/kafka/utils/Time;Lscala/Option;/Lscala/collection/Seq;)V

我根据spring docs https://spring.io/projects/spring-kafka的兼容性矩阵的要求尝试了很多更改版本

知道可能是什么问题吗?

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>

【问题讨论】:

  • 你能分享你完整的 pom 或 gradle 吗?
  • @OneCricketeer 我添加了 pom.请检查。
  • 您不应该为 spring 依赖项添加显式版本。如果你这样做,那么是的,你会得到错误。它们大部分都应该从你的启动器或父 pom 继承。特别是,尽管您的 Kafka Connect (Replicator) 依赖项不包括具有无法找到的类的代理服务器包
  • 没有像spring-kafka-clients 这样的东西。并且可能您的 kafka-connect-replicator 为您提取了 Apache Kafka 2.8
  • 当覆盖 Boot 规定的任何版本时,您必须为所有相关 jar 覆盖它们 - 请参阅 docs.spring.io/spring-kafka/docs/current/reference/html/… 但是,最好让 boot 处理依赖版本。

标签: spring-boot apache-kafka jar spring-kafka spring-kafka-test


【解决方案1】:

每当您为 kafka-clients 指定版本而不是让引导指定版本时;您还必须覆盖嵌入式代理使用的 kafka jar 版本。

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

【讨论】:

  • 您分享的 spring 文档有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多