Blog

트러블슈팅 : 프로듀서에서 메시지를 전송하는 과정에서 역직렬화 문제 발생

tag
트러블슈팅
날짜
2023/10/28
생성 일시
2023/10/29 07:12
작성자

문제 상황

Kafka를 사용하여 데이터를 전송하는 과정에서 프로듀서에서 객체를 직접 전송하려 할 때 역직렬화 문제가 발생하였습니다. 이로 인해 메시지를 정상적으로 처리하지 못하는 상황이 발생하였습니다

원인 분석

이 문제의 원인은 프로듀서와 컨슈머 사이의 데이터 직렬화 및 역직렬화 방식이 불일치하기 때문입니다. 처음에 프로듀서는 객체를 직접 Kafka로 전송하려 했으나, 이 경우 역직렬화 과정에서 타입 불일치 등의 문제가 발생할 수 있습니다. Kafka는 기본적으로 바이트 배열을 전송하므로, 객체를 전송하려면 적절한 직렬화 및 역직렬화 처리가 필요합니다.

해결 과정

1.
설정 파일 수정 프로듀서와 컨슈머의 설정 파일을 수정하여 객체를 JSON 문자열로 변환하여 전송하도록 설정을 변경하였습니다. 이를 통해 역직렬화 과정에서 발생할 수 있는 문제를 방지하였습니다.
2.
프로듀서 구현 변경 프로듀서에서 객체를 직접 전송하는 대신, 객체를 JSON 문자열로 변환하여 전송하도록 구현을 변경하였습니다. 이를 위해 KafkaTemplate<String, String>을 사용하여 문자열 데이터를 전송하도록 하였습니다.
@Service @RequiredArgsConstructor public class KafkaProducerService { private final KafkaTemplate<String, String> kafkaTemplate; public void sendMessage(String topic, String message){ kafkaTemplate.send(topic, message); } }
Java
복사
1.
테스트 및 검증 변경된 프로듀서 구현을 통해 메시지를 전송한 후, 컨슈머에서 메시지를 받아 JSON 문자열을 객체로 역직렬화하여 데이터를 정상적으로 처리할 수 있는지 확인하였습니다. 테스트 결과, 데이터가 정상적으로 전송되고 처리됨을 확인할 수 있었습니다.

해결

프로듀서와 컨슈머의 설정을 일치시키고, 데이터 전송 방식을 객체에서 JSON 문자열로 변경함으로써 역직렬화 문제를 해결할 수 있었습니다. 결과적으로 Kafka를 통한 데이터 송수신이 정상적으로 이루어지게 되었습니다.

정리

Kafka를 사용할 때는 데이터의 직렬화 및 역직렬화 방식을 주의 깊게 설정하고, 프로듀서와 컨슈머 간의 설정이 일치하는지 확인해야 합니다. 특히 객체를 직접 전송하는 경우, 역직렬화 과정에서 문제가 발생할 수 있으므로 객체를 JSON 문자열로 변환하여 전송하는 방식을 권장한다고 합니다. 이를 통해 데이터 송수신의 안정성을 높일 수 있습니다.