인프런 커뮤니티 질문&답변

leesln1님의 프로필 이미지

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Kafka 통신 클라이언트 응답 질문

24.10.18 13:57 작성

·

34

·

수정됨

0

서비스 로직이 실행될때 Kafka 통해 이벤트를 발행하는 순간 클라이언트 응답이 성공으로 나가는데

만약 이 이벤트를 처리하는 컨슈머쪽에서 실패한다고하면 클라이언트 응답은 이미 성공으로 보내졌는데

실패했다는걸 어떻게 알리나요?

 

보상트랜잭션을 발행해서 데이터를 되돌리는건 이해가 되지만 클라이언트 응답에 대해서는 어떻게 해야될지 궁굼합니다

 

Ex) 주문후 재고감소 이벤트를 발행하는 순간 클라이언트 응답은 성공으로감

하지만 재고감소하는 서비스에서 실패를 한다고하면? 

 

 

답변 2

1

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

2024. 10. 20. 08:50

안녕하세요, 이도원입니다.

말씀하신 부분은 클라이언트로 바로 응답이 전송되었기 때문에 발생되는 부분이기 때문에, Kafka의 처리 이후에 결과에 따라 클라이언트로 결과를 전송하도록 처리할 수 있습니다. 주문 요청의 경우 201 Created라는 응답코드를 전달하고 있는데, 이 부분에 클라이언트의 UI를 처리하는 Frontend에서 진행중인 상태(로딩 중, 처리 중과 같은 처리)로 처리하면서 Kafka의 요청을 비동기로 받은 다음에 사용자에게 보여주는 결과를 제어해야 합니다. 현재 강의에서는 Frontend 없이 Postman과 같이 즉각적으로 응답을 확인해야 하는 도구를 사용하고 있지만, 이 부분은 Frontend, Backend가 같이 처리되어야 하는 부분입니다.

추가로, Kafka에서는 메시지를 전달하였다는 부분만으로 메시지 처리가 완료되었다고 판단할 수도 있지만, Consumer에서 메시지를 잘 받았는지에 대한 반환 코드를 얻도록 설정할 수도 있습니다.

https://kafka.apache.org/22/generated/producer_config.html

추가 질문사항 있으시면 다시 글 남겨 주세요.

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 10. 18. 14:01

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

Kafka를 통해 이벤트를 발행한 후 클라이언트 응답이 이미 성공으로 나갔는데, 해당 이벤트를 처리하는 컨슈머 쪽에서 실패가 발생했을 경우에 대한 질문이군요.

이런 경우를 처리하기 위해서는 보통 보상 트랜잭션이나 재시도 로직을 도입합니다. 다음은 이러한 상황에서 고려해 볼 수 있는 방법들입니다:

  1. 보상 트랜잭션 패턴: Kafka 컨슈머가 이벤트를 처리하는 데 실패했을 때, 이전 상태로 복구할 수 있도록 하는 방법입니다. 예를 들어, 주문이 완료되었으나 재고 감소가 실패했다면, 주문을 취소하는 보상 작업을 트리거할 수 있습니다.

  2. 재시도 메커니즘: Kafka Consumer 측에서 메시지를 처리할 때 실패하면, 특정 횟수만큼 재시도하는 방법입니다. 이를 통해 일시적인 문제로 인해 처리에 실패한 경우에는 재시도로 해결할 수 있습니다.

  3. 데드레터 큐(Dead Letter Queue): Kafka에서는 실패한 메시지를 다른 큐(즉, 데드레터 큐)에 저장하게 하여, 나중에 수동으로 분석하거나 처리할 수 있습니다.

  4. 모니터링 및 알림 시스템: 문제가 발생했을 때 신속하게 알림을 받을 수 있도록 모니터링 시스템을 구성하고, 알림을 통해 즉시 대응할 수 있도록 준비합니다.

  5. 사용자에게 실패 알림: 최초 응답 시점에 이벤트 처리 결과를 클라이언트에게 보장할 수 없다면, 사용자를 위한 대체 피드백(예: 이메일이나 알림)을 제공하여 이벤트 실패 시 이를 인지할 수 있도록 합니다.

Kafka와 같은 비동기 메시징 시스템에서는 이러한 실패 처리를 잘 설계하는 것이 중요합니다. 위 방법들은 상황에 따라 조합하여 사용될 수 있으며, 실패를 미리 예측하고 대처할 수 있는 통합적인 전략을 세우는 것이 필요합니다.

유사한 주제를 다룬 질문과 답변을 확인하시려면 다음 링크를 참고해 주세요:
- Kafka와 트랜잭션에 대해서 궁금한점이 생겨서 질문드리고 싶습니다.
- 비동기 방식 질문입니다
- 안녕하세요 질문이 있습니다. (메시지 처리와 컨슈머 실패)

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

leesln1님의 프로필 이미지

작성한 질문수

질문하기