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

song yuheon·2023년 10월 29일
0

Trouble Shooting

목록 보기
44/57
post-thumbnail

문제 상황


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);
    }
}
  1. 테스트 및 검증
    변경된 프로듀서 구현을 통해 메시지를 전송한 후, 컨슈머에서 메시지를 받아 JSON 문자열을 객체로 역직렬화하여 데이터를 정상적으로 처리할 수 있는지 확인하였습니다.
    테스트 결과, 데이터가 정상적으로 전송되고 처리됨을 확인할 수 있었습니다.

해결


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


정리


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


profile
backend_Devloper

0개의 댓글