본문으로 바로가기

 

 

스프링 부트 기반으로 카프카 설정시 제목처럼 에러가 발생했다.

 

https://docs.spring.io/spring-kafka/reference/html/#producer-factory

 

Spring for Apache Kafka

When you use spring-kafka-test (version 2.4.x) with Spring Boot, you need to override certain Boot managed dependencies, as follows: org.springframework.kafka spring-kafka 2.4.5.RELEASE org.springframework.kafka spring-kafka-test 2.4.5.RELEASE test org.apa

docs.spring.io

 

해당 가이드문서를 통해 template을 올리고 샌드했는데 위처럼 에러가 발생.

@Bean
public ProducerFactory<Integer, String> producerFactory() {
    return new DefaultKafkaProducerFactory<>(producerConfigs());
}

@Bean
public Map<String, Object> producerConfigs() {
    Map<String, Object> props = new HashMap<>();
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
    // See https://kafka.apache.org/documentation/#producerconfigs for more properties
    return props;
}

@Bean
public KafkaTemplate<Integer, String> kafkaTemplate() {
    return new KafkaTemplate<Integer, String>(producerFactory());
}

가이드 방식대로 처리를 해보았다.

 

그런데 위처럼 에러가 

Missing required configuration "key.serializer" which has no default value

가 발생했다.

ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG 분명히 설정해주고 있는데 defaultValue가 없다는 것이다.

 

확인해보니 가이드문서가 잘못된듯하다.

producerConfigs로 빈을 올리게되면 map에 key에 producerConfigs라는 value는 Map을 리턴하게된다.

내부적으로는 key가 producerConfigs라는 키만 존재하는 것이다.

이를 빈으로 설정하지 않고

props를 바로 factory에 넣으면 정상적으로 동작하는것을 확인할 수 있다.