• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    미해결

MSA에서 카프카 사용

23.10.31 11:33 작성 23.11.01 11:24 수정 조회수 533

0

학습 목적으로 카프카를 사용 중인데, MSA 구조에서의 카프카 프로듀서, 컨슈머 개념이 잘 이해가 가지 않습니다 ㅠ

spring boot로 MSA 구조를 구축한 상태입니다. 각 서비스별로 스프링 부트 서버가 존재합니다. 각 서비스가 하나의 데이터베이스 (MySQL 혹은 MongoDB)를 공유하여 사용하려고 합니다.

이 때 스프링 부트가 카프카 토픽에 데이터를 저장하고, 토픽에 있는 데이터를 DB에 저장하여 MSA 환경에서 DB의 일관성을 유지하고자 하는데 이 경우에 카프카를 사용하는 것이 적합할까요?

또한 스프링 부트 서버에서 카프카 토픽에 데이터를 주고받을 프로듀서와 컨슈머, MySQL에 토픽의 데이터를 넣고 빼올 프로듀서와 컨슈머 이런식으로 한 서버 당 최소 4개씩을 각각 모두 설정해야하나요?

답변 2

·

답변을 작성해보세요.

0

안녕하세요.

msa구조에서 카프카는 비동기로 데이터를 처리하기 위함이 가장 큽니다. 예를 들어 커머스의 대규모 결제를 동기로 수행할 경우 DB에 많은 부하를 줄 수 있습니다. 이에 대응하기 위해 다음과 같이 카프카를 사용할 수 있습니다.

  1. 사용자의 결제 데이터를 REST API로 수신

  2. 수신된 결제 데이터를 카프카로 전송(프로듀서)

  3. 카프카로 전송된 데이터를 가져와서(컨슈머) DB에서 결제 로직 수행

  4. 결제가 완료되면 사용자에게 결제가 완료됨을 알림(웹소켓, 푸시알림 등)

이외에도 다양한 활용 사례가 있으므로 이런 부분은 IT회사의 개발 블로그를 참고하면 좋겠습니다.

그리고 프로듀서와 컨슈머의 개수는 MSA구조에 따라 다릅니다만, 운영 편의를 위해 컨슈머의 경우 별개의 애플리케이션(프로세스)로 배포/운영 하는 것을 추천드립니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.11.02

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

카프카를 MSA 구조에서 사용하고자 하면 프로듀서와 컨슈머 개념을 이해하는 것이 중요합니다.

카프카 프로듀서는 데이터를 생성하고 카프카 클러스터에 토픽에 데이터를 전송하는 역할을 합니다. 스프링 부트 서버에서 토픽에 데이터를 저장하는 기능을 담당합니다.

카프카 컨슈머는 카프카 토픽에서 데이터를 가져와 원하는 작업을 수행하는 역할을 합니다. 데이터를 가져와서 MySQL에 저장하는 등의 작업을 수행할 수 있습니다.

따라서, MSA 환경에서 DB의 일관성을 유지하기 위해 카프카를 사용하는 것은 적합한 방법입니다. 카프카를 통해 데이터의 흐름을 중앙 집중화하고 다른 서비스들이 원하는 데이터를 필요에 따라 가져가게 되므로 일관성을 유지할 수 있습니다.

스프링 부트 서버에서는 프로듀서와 컨슈머를 모두 설정해야 합니다. 하나의 서버에서 최소 2개의 컨슈머와 2개의 프로듀서를 설정하면 됩니다. 각 서비스마다 필요한 데이터에 따라 컨슈머와 프로듀서의 개수를 조정할 수 있습니다.

추가적으로, 카프카 클러스터의 구성과 토픽의 파티션 개수, 복제 팩터 등의 요소도 고려하여 설계해야 합니다. 이러한 문제에 대한 자세한 내용과 설정 방법은 따로 학습 자료나 카프카 문서를 참고하시면 도움이 될 것입니다. 감사합니다.

Nayeon Kim님의 프로필

Nayeon Kim

질문자

2023.11.04

답변 정말 감사합니다! 관련해서 추가 질문이 있습니다.
만약 서비스별로 각각의 DB를 사용하는 구조라고 한다면,

1. 각각의 DB가 프로듀서,컨슈머가 되어 카프카는 DB의 동기화를 담당
2. 각 서비스(스프링부트) 서버가 프로듀서, 컨슈머가 되어 카프카 토픽으로 데이터를 주고 받고, 백 서버가 DB 작업을 수행하는 구조

중 어떤 것이 더 카프카를 적절히 사용하는 구조일까요?