작성
·
23
0
예제에서는 StringSerializer
와 StringDeserializer
를 사용하도록 설정하고 ObjectMapper
를 통해 직렬화/역직렬화를 해주셨는데요.
혹시 JsonSerializer
와 JsonDeserializer
를 사용하지 않는 이유가 있을까요?
그리고, JsonDeserializer
를 사용하든 StringDeserializer
를 사용하든 역직렬화를 할 때 실패하게 되면 offset commit
이 되지 않고 재시도를 하는동안 해당 message 의 partition 은 blocking 된다고 이해하고 있는데 맞을까요?
이 경우에도 retry
이후, 해결 안되면 dlt topic
으로 이동하는게 맞을까요?
답변 2
0
안녕하세요! 질문 잘 해주셨어요 ~
질문해 주신 내용들에 대해 하나씩 답변 드려볼게요 !
"혹시 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
안녕하세요, 인프런 AI 인턴입니다. writer0713님.
Kafka에서 메시지를 직렬화 및 역직렬화할 때, JsonSerializer
와 JsonDeserializer
가 아닌 StringSerializer
와 StringDeserializer
를 사용하는 이유와 관련해 설명드리겠습니다. 또한, 메시지 처리에서의 절차에 대한 설명도 포함하였습니다.
StringSerializer
와 StringDeserializer
사용 이유단순성 및 성능: Kafka는 대량의 메시지를 전송할 때 초점을 맞추고 있습니다. StringSerializer
와 StringDeserializer
는 간단하고 빠르게 문자열 데이터를 처리할 수 있으며, 특히 메시지가 JSON 형식으로 이미 직렬화되어 있을 때 적합합니다.
ObjectMapper 활용: ObjectMapper
를 사용하면 복잡한 객체의 직렬화/역직렬화가 가능하며, Java 객체를 JSON 형태로 변환하는 경우 유연성을 제공합니다. 직접 클래스를 지정하여 다양한 객체에 대해 작업할 수 있습니다.
JsonSerializer
와 JsonDeserializer
JsonSerializer
와 JsonDeserializer
는 객체와 JSON 간의 직접 변환을 지원하며, 내부적으로 Jackson ObjectMapper
를 사용합니다. 이를 통해 객체를 보다 쉽게 JSON으로 변환할 수 있습니다. 그러나 이것도 StringSerializer
와 비슷한 목적을 이루기 때문에 상황에 따라 선택적으로 사용할 수 있습니다.Kafka에서는 메시지 처리가 실패하는 경우 커밋되지 않으며, 재시도 로직(exponential backoff 등)이 설정되어 있는 경우 해당 메시지를 재시도합니다. 재시도 기간 동안 해당 파티션은 잠기지 않지만, 파티션 내에 있는 해당 메시지는 재처리될 때까지 대기 상태에 놓일 수 있습니다.
Dead Letter Queue(DLT) 활용: 일정 횟수의 재시도에도 메시지가 정상 처리되지 않으면, DLT를 설정하여 해당 메시지를 다른 토픽으로 이동시켜 추후 분석 및 수동 처리를 하도록 할 수 있습니다. 이는 시스템의 신뢰성을 높이고 메시지 손실을 예방하는 중요한 방법입니다.
추가적으로, 관련된 질문과 답변을 확인하시려면 Kafka Consumer 직렬화 및 메시지 처리 링크를 참고하실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.