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

김동건님의 프로필 이미지

작성한 질문수

실습으로 배우는 선착순 이벤트 시스템

문제점

예제 프로젝트 상에서의 Kafka 사용시 궁금한점

작성

·

717

·

수정됨

1

강의 잘 듣고 있습니다. 질문사항이 두개 있습니다.

1.

4강의 [문제점] 영상에서 쿠폰생성 10000개 요청으로 인해 mysql이 1분에 100개의 insert가 가능하다고 가정할 시 '주문생성/회원가입요청이 타임아웃 또는 10분뒤에 실행' 된다고 하셨는데요.

예제로 사용하신 Kafka 사용 예제에서는 Consumer 프로젝트도 어차피 API프로젝트와 같은 DB를 바라보고 있으므로, 어차피 Kafka를 사용하여도 '주문생성/회원가입요청이 타임아웃 또는 10분뒤에 실행'되지 않나요?

 왜 여쭤보냐면, 강의 내에서 Kafka 미사용시 주문생성/회원가입요청의 타임아웃 및 10분뒤 실행에 대한 해결책을 Kafka로 사용하셔서 문의드립니다.

2.

5강의 [Consumer 사용하기] 영상을 보면 API 프로젝트 Consumer 프로젝트가 별개로 존재합니다.

그러므로 API프로젝트의 테스트 케이스가 종료되어도 Consumer 프로젝트는 이미 Kafka로 100개의 데이터가 스트림으로 들어오는 상태이므로, 테스트케이스가 종료되어도(즉, API프로젝트가 종료되어도) Cunsumer 프로젝트는 종료가 되지 않은 상태이므로 100개의 쿠폰이 DB에 생성이 되어야 하는게 아닌지요?

왜 여쭤보냐면, 강의 내에서는 API프로젝트가 종료되면 Consumer 프로젝트도 작업이 멈추는 현상이 있어서 문의드립니다.

답변 2

1

최상용님의 프로필 이미지
최상용
지식공유자

김동건님 안녕하세요.
좋은질문을 해주셔서 감사하다는 말씀을 먼저 드립니다.

1번 질문에 대한 답변을 먼저 드리도록 하겠습니다.
Kafka 미사용시 주문생성/회원가입요청의 타임아웃 및 10분뒤 실행에 대한 해결책으로 Kafka 를 선택한 이유는 배압조절(back pressure) 때문입니다.

10000개의 요청을 프로듀서를 활용하여 토픽으로 전송하고 카프카에서 10분에 걸쳐 차근차근 10000개를 생성하도록 처리한다면 database 에 가해질 수 있는 부하를 조절할 수 있게 됩니다.

부하를 조절 하였으므로 다른요청들을 처리할 수 있게 될 것입니다.

 

2번질문에 대한 답변을 드리면 말씀하신대로 100개의 쿠폰이 생성되어야 합니다.
무조건 중지되는 것일까요 ?

1

안녕하세요, 인프런 AI 인턴이에요.

1.4강에서 언급한 내용은 예제로 사용한 Kafka를 이용하여 주문 생성과 회원 가입 요청을 처리하는 경우입니다. 이 경우, Kafka를 통해 요청이 들어오면 Consumer가 해당 요청을 바로 처리하지 않고, 타임아웃이나 10분 뒤에 실행되도록 작업을 지연시킵니다. 따라서 주문 생성이나 회원 가입이 바로 처리되지 않고, 지연된 후에 실행됩니다.

그러나 Consumer 프로젝트가 API 프로젝트와 같은 DB를 바라보고 있다고 하더라도, Kafka를 통한 메시지 처리 방식에는 변함이 없습니다. Kafka를 사용하더라도 메시지 처리 작업은 타임아웃이나 지연된 실행을 위한 설정에 따라 처리됩니다.

2.5강에서 언급한 내용은 API 프로젝트와 Consumer 프로젝트를 별개로 존재시키는 경우입니다. 이 경우, API 프로젝트가 종료되어도 Consumer 프로젝트가 계속해서 Kafka에서 데이터를 스트림으로 받고 있을 수 있습니다. Consumer 프로젝트는 계속해서 데이터를 받고 처리하며, 따라서 테스트 케이스가 종료되거나 API 프로젝트가 종료되더라도 Consumer 프로젝트는 계속 실행되며, Kafka로부터 받은 데이터를 처리할 수 있습니다.

따라서 Consumer 프로젝트는 API 프로젝트가 종료되어도 데이터를 계속해서 처리할 수 있고, 100개의 쿠폰을 DB에 생성할 수 있습니다.

더 궁금하신 사항이 있으면 언제든지 물어보세요!