๐ฅ๏ธ TurtleMartํ๋ก์ ํธ/๐ ๏ธ ํธ๋ฌ๋ธ์ํ
[ํธ๋ฌ๋ธ์ํ ] key.serializer ๋๋ฝ๋์ ๋ Kafka ๋ฉ์์ง ์ ์ก ์คํจ
carrot0911
2025. 5. 27. 21:12
๐ ๋ฌธ์ ํ์
Kafka ๋ฉ์์ง๋ฅผ ์ ์กํ๋ ค๊ณ ํ ๋ ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
Invalid value null for configuration key.serializer: must be non-null
๐ ์์ธ ๋ถ์
Kafka๋ ๋ฉ์์ง๋ฅผ ์ ์กํ๊ธฐ ์ํด key์ value๋ฅผ ์ง๋ ฌํํด์ผ ํ๋ฉฐ, ๋ฐ๋์ ๋ ๊ฐ์ง ์ค์ ์ด ํ์ํ๋ค.
- key.serializer → ๋ณดํต org.apache.kafka.common.serialization.StringSerializer
- value.serializer → ๋ณดํต org.apache.kafka.support.serializer.JsonSerializer
ํ์ง๋ง ํ์ฌ KafkaTemplate์ ๊ตฌ์ฑํ ๋ ์ด ์ค์ ๋ค์ด ๋ช ์๋์ด ์์ง ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
๐ ํด๊ฒฐ ๋ฐฉ๋ฒ
Kafka Producer ์ค์ ํด๋์ค(KafkaProducerConfig)์์ ProducerFactory์ ์ค์ ์ ๋ช ์์ ์ผ๋ก ์ถ๊ฐํ๋ค.
โ ์์ ์ (๋๋ฝ๋ ์ค์ )
new DefaultKafkaProducerFactory<>(new HashMap<>()) // key.serializer ์์
โ ์์ ํ
@Bean
public ProducerFactory<String, KafkaMessage<StockDecreasePayload>> kafkaMessageProducerFactory() {
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, JsonSerializer.class);
return new DefaultKafkaProducerFactory<>(props);
}
@Bean
public KafkaTemplate<String, KafkaMessage<StockDecreasePayload>> kafkaTemplate() {
return new KafkaTemplate<>(kafkaMessageProducerFactory());
}
๐ก ์ถ๊ฐ ํ
Spring Boot์ application.yml์ด๋ .properties์ ์ค์ ํ๋๋ผ๋, ์ง์ ์์ฑํ KafkaTemplate์๋ ์ฝ๋์์ ๋ช
์ํด์ผ ์ ์ฉ์ด ๋๋ค.
@EnableKafka ๋ง์ผ๋ก๋ ์๋์ผ๋ก ์ ์ฉ๋์ง ์๋๋ค.