consumer에서 에러가 발생할 경우 데이터 유실 문의
안녕하세요. kafka 관련해서 질문이 있습니다.
MessageRelay > publishEvent 에서 outbox를 삭제했는데 consumer에서 에러가 발생하면 데이터가 유실되는게 아닌가요?
Answer 2
0
hack4569님, 안녕하세요!
outbox 패턴은 producer의 유실을 방지하기 위한 방법입니다.
producer의 비즈니스 로직 변경과 이벤트 발행을 하나의 트랜잭션으로 묶기 위한 것이고,
consumer의 유실 방지는 별도로 챙겨져야 합니다!
이러한 부분은 consumer가 레코드에 대한 작업이 완전히 처리된 이후에 커밋하는 전략, 실패 시에 재처리 토픽에 다시 담는 전략 등을 겸할 수 있을 것 같습니다.
0
안녕하세요, 인프런 AI 인턴입니다. hack4569님.
Kafka와 outbox 패턴 관련 질문을 주신 것 같습니다. 메시지 발행 후 Consumer에서 에러가 발생했을 때, 데이터 유실에 대한 우려가 있을 수 있습니다. 이는 Outbox 패턴에서 발생할 수 있는 중요한 문제 중 하나입니다.
해결책 및 고려사항:
오프셋 관리:
- Consumer는 Kafka로부터 메시지를 처리한 후, 처리 완료 여부를 오프셋으로 관리합니다. 만약 에러가 발생하면 오프셋이 커밋되지 않도록 처리하여, 재시작 혹은 재처리 시 다시 동일 메시지를 수신할 수 있도록 합니다.
- Consumer는 Kafka로부터 메시지를 처리한 후, 처리 완료 여부를 오프셋으로 관리합니다. 만약 에러가 발생하면 오프셋이 커밋되지 않도록 처리하여, 재시작 혹은 재처리 시 다시 동일 메시지를 수신할 수 있도록 합니다.
Dead Letter Queue (DLQ):
- 실패한 메시지를 별도의 Dead Letter Queue로 보내는 방식을 고려해볼 수 있습니다. 이는 특정 메시지가 여러 차례 실패할 경우 해당 메시지를 추적하고 나중에 별도 처리를 가능하게 해줍니다.
- 실패한 메시지를 별도의 Dead Letter Queue로 보내는 방식을 고려해볼 수 있습니다. 이는 특정 메시지가 여러 차례 실패할 경우 해당 메시지를 추적하고 나중에 별도 처리를 가능하게 해줍니다.
재처리 메커니즘:
- Outbox에서 데이터를 삭제하기 전에, 반대작업(복구 또는 재처리)을 위한 로그를 남기거나 별도의 백업 시스템을 통해 트랜잭션 로그를 남길 수 있습니다.
- Outbox에서 데이터를 삭제하기 전에, 반대작업(복구 또는 재처리)을 위한 로그를 남기거나 별도의 백업 시스템을 통해 트랜잭션 로그를 남길 수 있습니다.
확실한 전송 보장:
- Kafka의 At-Least-Once 전송 보장 설정을 통해 메시지가 최소한 한 번은 Consumer에게 전달되도록 옵션을 설정할 수 있습니다. 이 경우 재전송은 가능하지만, 중복 처리가 될 위험이 있습니다.
- Kafka의 At-Least-Once 전송 보장 설정을 통해 메시지가 최소한 한 번은 Consumer에게 전달되도록 옵션을 설정할 수 있습니다. 이 경우 재전송은 가능하지만, 중복 처리가 될 위험이 있습니다.
모니터링 및 알람:
- 오류 발생 시 즉시 대응할 수 있도록 모니터링 시스템 및 알람 체계를 구축하여 Consumer의 에러를 감지하고 손쉽게 디버깅 및 복구하는 것이 좋습니다.
- 오류 발생 시 즉시 대응할 수 있도록 모니터링 시스템 및 알람 체계를 구축하여 Consumer의 에러를 감지하고 손쉽게 디버깅 및 복구하는 것이 좋습니다.
이와 관련하여 추가적인 정보를 확인하시려면, 관련된 링크나 유사한 질문의 답변을 검토해보는 것도 좋습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
게시글 테스트 데이터 삽입
0
41
2
정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?
0
91
2
좋아요 기능 정합성 보장 방법
0
86
2
좋아요 동시성처리 최적의 선택?
1
108
2
프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해
0
82
2
안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.
0
51
1
조회수 조회 로직 질문
1
59
2
비로그인 유저도 어뷰징 방지 정책
1
60
2
CommentServiceTest의 테스트 로직 질문
0
47
2
무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문
1
68
2
path 쿼리 관련 질문드립니다!
0
50
2
antigravity 에디터를 쓰신다면 종료해주세요
1
115
0
프로젝트 구조
0
79
2
article_like_count api test
0
65
2
이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.
0
93
2
[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제
0
81
2
findByPath에서 articleId로도 검색을 해야 할 것 같아요.
0
84
3
jpa ddl-auto none을 하는 이유와 join 방법
0
90
2
팩터리 메소드와 response 객체 사용 이유가 궁금합니다!
0
82
2
커서 기반 페이지네이션 과 무한 스크롤링
0
91
2
게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기
0
92
2
멀티 모듈이 아닌 MSA 환경에서 common
0
143
2
2Depth 강의 도중 궁금한 점 있어요!!
0
69
2
샤딩에 대해서 궁금점있습니다.
0
108
2

