• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

카프카 토픽안쓰고 저장하면 대용량 처리에 불리한 이유가 있나요?

22.09.19 21:06 작성 조회수 370

0

안녕하세요 강의를 듣다가 궁금증이 카프카 토픽을 안쓰고 저장하면 대용량 처리에서 불리한 이유가 있나 싶어 궁금해 졌습니다.

 

우선 인터넷에서 검색해서 찾아본 봐로는

그러면 카프카 사용하면 대용량 처리에 유리한 이유가

  1. 병렬처리에 의한 데이터 처리율 향상 : 카프카는 아래 보실 아키텍처에 보면 데이터를 병렬로 처리함으로서 데이터를 빠르고 효과적으로 처리할 수 있습니다. disk에 순차적으로 데이터를 적재하기 때문에 임의 접근(random access) 방식보다 훨씬 더 빠르게 데이터를 처리합니다.

  2. 데이터 유실 방지 : disk에 적재되기 때문에 만약 불의의 사고로 서버가 다운되었을 시에도 데이터가 유실되는 일 없이 재시작하여 기존 데이터를 안정적으로 처리 가능합니다.

  3. 클러스터링에 의한 고가용성 서비스 : Scale-out이 가능하여 시스템 확장이 용이하며 어떤 하나 혹은 몇 개의 서버가 다운되도 서비스 자체가 중단될 일 없이 시스템이 운용가능합니다.

출처 : https://engkimbs.tistory.com/691

정도로 보이는데요

 

그렇다면

토픽을 사용하는 경우와

카프카 커넥트를 사용하는 경우가 있었는데 (프로듀서, 컨슈머를 파이프라인을 매번 구성하기 힘들어서 사용하는 것으로 알고 있습니다.)

그러면 우선 첫번째 질문

토픽을 사용할 때와 카프카 커넥트를 사용할 때 모두 카프카가 알아서 병령처리를 해주고 데이터 유실 방지를 해주는 건가요??

 

또한 두번째 질문은 강의에서 order-service를 여러 개 띄우고 주문 요청을 여러 번 하면

여러 개의 order-service의 db에 나눠서 저장을 하는 식으로 했는데요

현업에서 MSA환경에서 프로젝트할 때도

예를들면 order-service, user-service, catalog-service 각각 db를 하나씩 사용하는게 일반적인 방법인가요? 즉, 각 서비스마다 db를 하나씩 두는 것이 일반적인 방법인가요?

 

세번째 질문은 강의에서

order-service를 여러개 띄우고 하나의 db에 저장하는 방식을 사용했는데

즉, Kafka Topic에 설정된 Kafka Sink Connect를 사용해 단일 DB에 저장 했서 데이터를 동기화 했는데.

그러면 카프카 커넥트를 사용하지 않고는 여러개의 order-service를 단일 db에 저장할 수 없나요?

 

답변 1

답변을 작성해보세요.

0

안녕하세요, 이도원입니다.

질문하신 내용에 답변 및 의견드립니다.

1)

-> 카프카 커넥트를 사용한다고 해도 데이터(메시지)가 저장되는 공간은 토픽(Topic)이고, 카프카 커넥트에서는 카프카 토픽으로 데이터를 지속적으로 전달하는 역할을 하게 됩니다.

2)

-> MSA를 설계할 때나 기존 시스템을 MSA로 전환하고자 할 때 제일 고민이 많이 되는 부분, 고려해야만 하는 부분이 DB에 관련된 부분입니다. DB의 분리 및 데이터 동기화에 대한 처리 방식, 메커니즘을 결정하지 못하면 성능 저하 및 데이터 일괄성에도 문제가 생길 수 있습니다. 각각의 마이크로서비스마다 하나의 독립적인 DB를 유지해야 하는 것은 아닙니다. 대상 서비스의 경계가 역할에 따라 DB를 분리할 지, 통합할 지, 하나의 DB를 여러 개로 분리하여 사용할 지 등을 결정해야 합니다. 일반적인 방법이라기 보다는 서비스의 역할과 용도에 따라 DB를 어떻게 분리하고 동기화 할지를 결정해야 한다고 생각합니다.

3)

-> 카프카를 이용하는 데이터 동기화 방법은 MSA에서 데이터 동기화를 위한 MQ 서비스를 이용하는 하나의 방식을 설명 드린겁니다. 여러 서비스가 사용자의 요청에 대한 처리를 위한 DB를 사용할 때, 단일 DB를 사용하면서, 데이터 동기화를 처리하기 위한 방법으로 카프카를 이용한 것이고, 데이터를 동기화하기 위한 여러 방식 중에 하나라고 보시면 될 것 같습니다. 실제로 카프카를 사용하지 않더라도 각각의 order-service에서 JDBC를 이용하여 직접 DB에 데이터를 저장하셔도 됩니다. 그런데 직접 JDBC로 연결하여 데이터를 저장하는 작업의 경우 데이터의 양이 많아 질 경우에는, 해당 처리가 완료되기 전까지는 사용자 요청이 Blocking될 것이고, 다른 order-service들도 비슷한 상황이 될 것입니다. 카프카와 같은 MQ 서비스를 사용하는 목적은 order-service에서는 사용자의 요청에 대한 처리를 카프카에게 넘겨 줌으로써, Blocking없이 다른 작업(요청)을 처리할 수 있게 됩니다. 데이터의 사용량이나 처리량으로 파악하여 카프카와 같은 미들웨어를 추가하는 것이 좋을 것 같습니다.

추가 질문 사항 및 다른 의견 있으시면 글 남겨 주세요.

감사합니다.