Java 如何解决Kafka消息生成器NoSuchMethodError org.apache.Kafka.common.security.ssl.SslFactory.sslEngineBuilder()的问题

Java 如何解决Kafka消息生成器NoSuchMethodError org.apache.Kafka.common.security.ssl.SslFactory.sslEngineBuilder()的问题,java,apache-kafka,spring-kafka,Java,Apache Kafka,Spring Kafka,我正在尝试运行一个简单的消息生成器,它利用SSL安全性与Confluent平台进行连接。我正在使用Spring Kafka的KafkaTemplate发送消息。但是,在调用kafkaTemplate.send()时,我收到以下消息: Failed to construct kafka producer java.lang.NoSuchMethodError: org.apache.kafka.common.security.ssl.SslFactory.sslEngineBuilder()Lor

我正在尝试运行一个简单的消息生成器,它利用SSL安全性与Confluent平台进行连接。我正在使用Spring Kafka的
KafkaTemplate
发送消息。但是,在调用
kafkaTemplate.send()
时,我收到以下消息:

Failed to construct kafka producer
java.lang.NoSuchMethodError: org.apache.kafka.common.security.ssl.SslFactory.sslEngineBuilder()Lorg/apache/kafka/common/security/ssl/SslEngineBuilder;
我不确定此问题是否源于属性文件中缺少的属性(例如,
spring.kafka.properties.*
),或者该问题是否是依赖项之一。在我的pom.xml文件中,我有以下内容:

     <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>io.confluent</groupId>
            <artifactId>kafka-avro-serializer</artifactId>
            <version>5.5.1</version>
        </dependency>
        <dependency>
            <groupId>io.confluent</groupId>
            <artifactId>kafka-streams-avro-serde</artifactId>
            <version>5.5.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.confluent</groupId>
            <artifactId>kafka-client-plugins</artifactId>
            <version>5.5.1-ce</version>
        </dependency>
    </dependencies>

org.springframework.boot
SpringBootStarterWeb
org.springframework.kafka
春天卡夫卡
合流的
卡夫卡avro序列化程序
5.5.1
合流的
卡夫卡河酒店
5.5.1
org.slf4j
slf4j-log4j12
合流的
卡夫卡客户端插件
5.5.1-ce
到目前为止,我一直无法找到为什么找不到那个特定的方法。我怀疑我丢失了一个或多个属性,但我不确定是哪一个

在属性文件中,我有以下值

spring.kafka.properties.basic.auth.credentials.source=USER_INFO
spring.kafka.properties.security.protocol=SASL_SSL
spring.kafka.properties.sasl.mechanism=OAUTHBEARER
spring.kafka.properties.sasl.login.callback.handler.class=io.confluent.kafka.clients.plugins.auth.token.TokenUserLoginCallbackHandler
spring.kafka.properties.sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required username=<removed> password=<removed> metadataServerUrls=<removed>

spring.kafka.properties.basic.auth.credentials.source=USER\u INFO
spring.kafka.properties.security.protocol=SASL\u SSL
spring.kafka.properties.sasl.mechanism=OAuthBear
spring.kafka.properties.sasl.login.callback.handler.class=io.confluent.kafka.clients.plugins.auth.token.TokenUserLoginCallbackHandler
spring.kafka.properties.sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule所需用户名=密码=MetadataServerURL=

根据我所做的研究和这里提供的帮助,我已经能够确定问题在于兼容性。合流的5.5.1库与Spring Boot 2.4.x不兼容,因为
kafka客户端2.6.0
is

您似乎缺少
org.apache.kafka:kafka客户端
dependencyI添加到该依赖项中,但错误仍然存在。我注意到在有效的pom中,kafka客户机版本2.6.0列在依赖项中,而pom.xml文件中没有依赖项。当我明确声明依赖关系时——即使我加入了不同的版本——有效的pom仍然显示为2.6.0。它也在那里出现了两次。
spring kafka
将把它作为一个可传递的依赖项引入,但这确实是您的错误中类所需要的依赖项。。。但是,如果该特定方法在2.6.0中,我并不完全确定该版本。但是,您是否真的在使用SSL Kafka客户端属性?我已经更新了帖子以包含这些属性。这些属性由我们的平台团队提供,作为用于此场景的适当属性。我们正在转向RBAC。经过进一步挖掘,我发现Spring Boot 2.4.x=kafka客户端2.6.0;Spring Boot 2.3.13.RELEASE=kafka客户机2.5.1,并且2.5.1是不显示此行为的最新版本(它是2.5.x系列中的最新版本)。