如何解决Kafka消息生产者NoSuchMethodError org.apache.kafka.common.security.ssl.SslFactory.sslEngineBuilder()

How to solve Kafka message producer NoSuchMethodError org.apache.kafka.common.security.ssl.SslFactory.sslEngineBuilder()

我正在尝试 运行 一个利用 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>

到目前为止,我一直无法找到找不到该特定方法的原因。我怀疑我缺少一个或多个属性,但我不确定是哪一个。

在属性文件中我有以下值

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>

根据我所做的研究和此处提供的帮助,我已经能够确定问题是兼容性问题。 Confluent 5.5.1 库与 Spring Boot 2.4.x 不兼容,因为 kafka-clients 2.6.0 that is compatible with Spring Boot 2.4.x is not compatible with that version of Confluent.