Spring Kafka не может найти компонент свойств Kafka

#java #spring-boot #apache-kafka #spring-kafka

#java #spring-boot #apache-kafka #spring-kafka

Вопрос:

Я пытаюсь использовать Spring Kafka в своем проекте, где версия spring boot — 2.2.2.RELEASE, версия kafka — 2.3.x.

     implementation 'org.springframework.kafka:spring-kafka'
  

У меня есть мой класс KafkaConfig и настройка класса прослушивателя:

 @EnableKafka
@Configuration
public class KafkaConfig {
Config cfg = new Config();


@Bean
public ConsumerFactory<String, String> consumerFactory() {
Map<String, Object> props = new HashMap<>();
props.put(
    ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,
    cfg.getProperty("server"));
props.put(
    ConsumerConfig.GROUP_ID_CONFIG,
    UUID.randomUUID());
props.put(
    ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
    StringDeserializer.class);
props.put(
    ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
    StringDeserializer.class);
return new DefaultKafkaConsumerFactory<>(props);
}

@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory();
factory.setConsumerFactory(consumerFactory());
return factory;
}
}
  

KafkaConsumer.java

 @Service
public class KafkaConsumer {
private final Logger LOG = LoggerFactory
  .getLogger(KafkaConsumer.class);

@KafkaListener(topics = "anomaly-topic")
void listener(String message) {
LOG.info("Listener [{}]", message);
}
}
  

Когда я пытаюсь запустить свое приложение, я получаю исключение ниже:

 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.kafka.KafkaAnnotationDrivenConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'spring.kafka-org.springframework.boot.autoconfigure.kafka.KafkaProperties': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.kafka.KafkaProperties]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/kafka/common/requests/IsolationLevel
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
  

Ответ №1:

Я нашел решение этой проблемы, чтобы отключить KafkaAutoConfiguration.class,

 @SpringBootApplication(exclude = KafkaAutoConfiguration.class)
  

Ответ №2:

Со мной случилось то же самое, причина в том, что у меня была следующая библиотека:

 implementation(group="io.confluent", name="kafka-avro-serializer", version="5.5.1")
  

Который поставляется со своей собственной kafka-clients версией with 5.5.1-ccs , которая подбиралась и вызывала проблемы с совместимостью.

Я решил это с помощью Spring Dependency Management:

 plugins {
    id("org.springframework.boot") version "2.2.2.RELEASE"
    id("io.spring.dependency-management") version "1.0.9.RELEASE"
}
  

Затем выполняется gradle clean

Комментарии:

1. Спасибо за ответ Yayotron, в моем случае мне пришлось отключить класс KafkaConfiguration. Спасибо за ответ, хорошего дня.