현재 주문 아키텍처

Untitled

재고관련 topic에서 partition을 1로하고 consumer를 하나만 띄웠을 경우, 카프카 특성상 파티션은 큐와같이 내부에 데이터가 파티션끝에서부터 차곡차곡 쌓이게 되고 consumer는 순차적으로 처리를 하게되어 동시성 문제가 일어나지 않는다.

현재 주문 flow

  1. 레디스에서 재고 감소
  2. 상품 정보 이벤트
  3. 주문 발행 이벤트
  4. 결제 진행 이벤트
  5. 배송 진행 이벤트
  6. 실제 db의 재고 감소 이벤트 → 동시성 문제 발생

문제 상황

Untitled

대규모 트래픽의 요청이 들어오는 상황이 많다면 파티션 여러개와 그에 맞는 컨슈머서버를 띄우는게 성능상 좋다. 파티션을 늘리는 이유는 컨슈머의 개수를 늘려서 데이터 처리를 분산시킬 수 있기 때문이다. 그렇게 되면 Product Consumer에서 동시에 동일한 데이터를 조회를 하게 되어 동시성 문제가 터질 수 있다.

해결 방안