메시지 중복·유실 문제를 직접 경험한 결
Kafka 같은 메시지 시스템을 쓸 때 가장 주의해야 할 건 메시지 유실과 중복 처리 문제라고 생각합니다. 컨슈머가 처리 도중 실패하면 같은 메시지를 다시 받게 되는 구조가 기본인데, 이 점을 모르고 쓰면 데이터가 중복으로 처리되는 문제가 생깁니다.
졸업 프로젝트에서 이벤트 스트리밍 구조를 처음 써봤을 때, 처리 완료 전에 오프셋을 커밋하도록 설정했습니다. 그 결과 컨슈머가 재시작되면 마지막으로 처리한 메시지가 사라지는 문제가 났습니다. 오프셋 커밋 시점을 처리 완료 후로 바꿨더니 유실은 해결됐는데, 이번엔 중복이 생겼습니다.
두 가지를 동시에 잡으려면 멱등성 설계가 필요하다는 걸 그때 배웠습니다.
메시지 시스템은 구조 자체보다 실패 시 어떤 일이 생기는지를 먼저 설계해야 한다는 감각이 그 경험에서 생겼습니다.