我正在尝试运行一个简单的消息生成器,它利用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不兼容,因为兼容Spring Boot 2.4.x的kafka-clients 2.6.0
与该版本的Confluent不兼容。