인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

창신동 장첸님의 프로필 이미지

작성한 질문수

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

Consumer 사용하기

카프카를 도입하고 난 뒤 로그로 보여지는 장점을 발견하지 못하고 있습니다.

작성

·

89

0

안녕하세요 강사님.

 

강의 마지막에 API서브모듈에서 직접 MySQL로 여러 쓰레드가 JPA save를 통해 INSERT하는 과부하가 발생하던 것을 카프카를 통해서 처리량을 조절할 수 있다고 말씀하셨습니다.

 

카프카를 사용하는 것만으로도 처리량이 조절된다는 뜻이 잘 이해가 가지 않습니다.

특히 컨슈머서브모듈에서 보여지는 로그를 확인해보면 여전히 단 건으로 SQL들이 전송되는 것을 확인할 수 있었는데요.

배치방식으로 여러 SQL을 한데 모아 한번에 SQL횟수를 줄여주는 것을 기대했으나 그렇지 않아 어떤 원리로 처리량이 줄어드는 것인지 이해를 못했습니다ㅠㅠ

답변 2

1

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

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

창신동 장첸님께서 Kafka를 통해 처리량이 조절된다는 부분에 대해 궁금증이 있으신 것 같아 설명드리겠습니다. Kafka를 사용하는 주된 이유는 메시지를 순차적으로 처리하여 데이터베이스에 부하가 가지 않도록 하는 것입니다. Kafka 자체가 일종의 메시지 큐처럼 작동하여, 데이터의 ‘폭주’를 방지하고 순차적으로 처리할 수 있는 환경을 제공합니다.

  • Kafka의 기본 동작 원리: 프로듀서가 메시지를 Kafka 토픽에 쌓으면, 컨슈머가 이 메시지를 가져가서 처리하게 됩니다. 이때 Kafka 컨슈머는 메시지를 ‘순차적으로’ 가져가게 되기 때문에 한 번에 많은 요청이 데이터베이스에 동시에 전달되는 것을 방지할 수 있습니다. 이를 통해 데이터베이스 처리량이 제한적으로 조절되는 것입니다.

  • 단 건으로 SQL이 전송되는 이유: Kafka 소비자는 특정 크기나 시간 간격으로 메시지를 집합 처리(batching)하지 않는 한, 기본적으로 메시지 하나하나를 처리하게 됩니다. 이 설정은 Kafka 라이브러리나 애플리케이션 코드에 따라 다를 수 있으며, Kafka 자체가 메시지를 소그룹으로 묶어 배치 처리할 수 있도록 별도의 배치 처리 로직을 구현하여 최적화할 수 있습니다.

  • 배치 처리 구현 제안: 여러 SQL 명령을 모아서 처리하고 싶다면, Kafka 컨슈머를 설정하는 코드에 배치 처리 로직을 추가하는 것이 필요합니다. Java Spring Kafka 기반으로 구현된 예제에서 fetch.max.bytesmax.poll.records를 이용하여 폴링하는 메시지의 배치 크기를 조정하거나, 메시지를 일정 시간 동안 모아두었다가 한번에 처리하는 방식으로 구현할 수 있습니다.

참조할 만한 질문:
- Kafka 등의 메시지 브로커를 사용하는 이유에 대해 질문있습니다!

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

0

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

창신동 장첸님 안녕하세요.
답변이 늦어져서 죄송합니다.

강의에서는 카프카를 중간에 배압조절을 위한 장치로 사용하였습니다.
1만명의 사용자가 동시에 요청을 보낸다고 가정해보겠습니다.

API 에서 바로 DB 에 insert 를 하게 되면 1만번의 요청이 거의동시에 DB 에 요청을 보내게 됩니다.
동시에 많은 요청은 DB 에 부담을 줄 수 있습니다.
카프카로 메시지를 전달하고 순차적으로 처리를 하여 1만번의 요청을 순차적으로 처리하여 DB 에 부담을 줄일 수 있습니다.

위와같은것이 가능한 이유는 카프카는 메시지를 토픽에 적재한 후 먼저 적재된 메시지를 처리한 이후에 다음 메시지를 처리하기 때문입니다.

따라서, DB에 보내는 요청을 분산시킬 수 있게됩니다.

궁금하신점이 있다면 질문 부탁드립니다!
감사합니다.

창신동 장첸님의 프로필 이미지

답변 감사합니다. 강사님

'배압조절' 이게 핵심이군요