inflearn logo
강의

Course

Instructor

Introduction to Kafka for Immediate Real-World Use

[Practice] Writing code to send messages to Kafka with Spring Boot (Producer)

JsonSerializer & JsonDeserializer

73

writer0713

16 asked

0

예제에서는 StringSerializerStringDeserializer 를 사용하도록 설정하고 ObjectMapper 를 통해 직렬화/역직렬화를 해주셨는데요.

 

혹시 JsonSerializerJsonDeserializer 를 사용하지 않는 이유가 있을까요?

 

그리고, JsonDeserializer 를 사용하든 StringDeserializer 를 사용하든 역직렬화를 할 때 실패하게 되면 offset commit 이 되지 않고 재시도를 하는동안 해당 message 의 partition 은 blocking 된다고 이해하고 있는데 맞을까요?

 

이 경우에도 retry 이후, 해결 안되면 dlt topic 으로 이동하는게 맞을까요?

kafka EDA msa devops infrastructure

Answer 2

0

jscode

안녕하세요! 질문 잘 해주셨어요 ~

질문해 주신 내용들에 대해 하나씩 답변 드려볼게요 !

 

"혹시 JsonSerializer 와 JsonDeserializer 를 사용하지 않는 이유가 있을까요?"

-> JsonSerializer와 JsonDeserializer를 사용했을 때 아래 링크에 나와있는 경로 및 타입 문제가 발생합니다! 그래서 강의에서는 StringSerializer를 활용해서 훨씬 심플하게 직렬화/역직렬화를 수행한거예요:)

https://techblog.gccompany.co.kr/kafka-message-conversion-serial-deserializing-39d10927c6ff

 

"역직렬화를 할 때 실패하게 되면 offset commit 이 되지 않고 재시도를 하는동안 해당 message 의 partition 은 blocking 된다고 이해하고 있는데 맞을까요?"

-> 네 맞아요 ! 잘 이해하고 계세요 ~

역직렬화에 실패하면 해당 레코드에 대한 처리가 성공하지 않았으므로 오프셋 커밋이 진행되지 않아요 !

 

"이 경우에도 retry 이후, 해결 안되면 dlt topic 으로 이동하는게 맞을까요?"

-> 네, 맞아요 ! retry를 여러 번 시도했음에도 실패하면 DLT로 메시지를 이동시켜야해요 !

 

추가로 또 궁금하신 점 있으시면 편하게 질문 남겨주세요 ~~

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. writer0713님.

Kafka에서 메시지를 직렬화 및 역직렬화할 때, JsonSerializerJsonDeserializer가 아닌 StringSerializerStringDeserializer를 사용하는 이유와 관련해 설명드리겠습니다. 또한, 메시지 처리에서의 절차에 대한 설명도 포함하였습니다.

1. StringSerializerStringDeserializer 사용 이유

  • 단순성 및 성능: Kafka는 대량의 메시지를 전송할 때 초점을 맞추고 있습니다. StringSerializerStringDeserializer는 간단하고 빠르게 문자열 데이터를 처리할 수 있으며, 특히 메시지가 JSON 형식으로 이미 직렬화되어 있을 때 적합합니다.

  • ObjectMapper 활용: ObjectMapper를 사용하면 복잡한 객체의 직렬화/역직렬화가 가능하며, Java 객체를 JSON 형태로 변환하는 경우 유연성을 제공합니다. 직접 클래스를 지정하여 다양한 객체에 대해 작업할 수 있습니다.

2. JsonSerializerJsonDeserializer

  • JsonSerializerJsonDeserializer는 객체와 JSON 간의 직접 변환을 지원하며, 내부적으로 Jackson ObjectMapper를 사용합니다. 이를 통해 객체를 보다 쉽게 JSON으로 변환할 수 있습니다. 그러나 이것도 StringSerializer와 비슷한 목적을 이루기 때문에 상황에 따라 선택적으로 사용할 수 있습니다.

3. 메시지 처리 절차

  • Kafka에서는 메시지 처리가 실패하는 경우 커밋되지 않으며, 재시도 로직(exponential backoff 등)이 설정되어 있는 경우 해당 메시지를 재시도합니다. 재시도 기간 동안 해당 파티션은 잠기지 않지만, 파티션 내에 있는 해당 메시지는 재처리될 때까지 대기 상태에 놓일 수 있습니다.

  • Dead Letter Queue(DLT) 활용: 일정 횟수의 재시도에도 메시지가 정상 처리되지 않으면, DLT를 설정하여 해당 메시지를 다른 토픽으로 이동시켜 추후 분석 및 수동 처리를 하도록 할 수 있습니다. 이는 시스템의 신뢰성을 높이고 메시지 손실을 예방하는 중요한 방법입니다.

추가적으로, 관련된 질문과 답변을 확인하시려면 Kafka Consumer 직렬화 및 메시지 처리 링크를 참고하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

2. Kafka 설치 파일 다운받기 404 Not Found 오류 관련

0

59

2

UserSignedUpEventConsumer 에서 로그 DB 저장 문의

0

51

2

리더 파티션 선출 규칙에 관한 질문

0

69

2

kafka 실패 후 재시도 DLT 소비 무한으로 하는 현상이 발생합니다

1

141

2

질문드립니다.

0

53

2

잘못된 이메일 주소로 인해 발송 실패 코드

0

107

3

카프카 서버 관련 질문입니다.

0

89

2

선생님 질문이 있습니다. 왜 바로 aws 설치 하시는지 궁금합니다.

0

98

2

Kafka 음성메세지 브로커로도 적합한가요?

0

78

2

재시도조차 실패한 메시지 사후 처리하기

1

110

2

retry 시 동작과정 질문

0

119

2

auto.create.topics.enable=false 설정

0

100

2

email 발송 로직 관련

0

69

2

concurrency 설정 + 같은 groupId 내에 consumer 여러개

0

74

2

concurrency 동작 안됨

0

72

3

컨슈머 서버 점진적 배포 시나리오

0

63

2

Connection -1

0

58

2

적정 파티션 개수 계산하는 방법 질문드립니다

0

126

2

섹션5 33 질문드립니다

0

47

1

aws아닌 도커로는 안되나요?

0

102

2

파티션 증가 질문드립니다

0

76

2

섹션7 51 컨슈머서버 무한 리로드?

0

141

4

섹션6 43 질문드립니다

0

57

3

kafka [37강의]

0

64

2