아파치 카프카(Apache Kafka)의 동작 방식과 원리 [2]

busybean3·2021년 9월 7일
0

카프카

목록 보기
2/13

카프카는 메시징 서버로 동작합니다. 여기서 메시징 시스템은 아래의 정의와 같습니다.

메시징 시스템은 메시지라고 불리는 데이터 단위를 퍼블리셔(pubilsher), 프로듀서(producer)에서 카프카에 토픽(topic)이라는 각각의 메시지 저장소에 데이터를 저장하면, 서브스크라이버(subscriber), 컨슈머(comsumer)가 원하는 토픽에서 데이터를 가져가게 됩니다. 이 처럼 중간에 메시징 시스템 서버를 두고 메시지를 보내고 받는 통신을 Pub/Sub 모델이라고 칭합니다.

Pub/Sub 모델이란? 👨🏻‍💻

이런 Pub/Sub 모델은 비동기 메시징 전송 방식으로, 발신자의 메시지에는 수신자가 정해져 있지 않는 상태로 publish 합니다. 그리고 이를 Subscribe을 한 수신자만 정해진 메시지(topic)를 받을 수 있습니다. 이처럼 수신자는 발신자 정보가 없어도 원하는 메시지만 수신할 수 있으며, 이러한 구조 덕분에 높은 확장성을 확보할 수 있습니다.

반면 Pub/Sub 모델이 아닌 일반적인 통신방법은 직접 연결하며 통신하게 됩니다. 이럴 경우 빠른 전송 속도와 전송 결과를 신속하게 알 수 있다는 장점이 존재합니다. 하지만 여기서 큰 문제는 특정 개체에 장애가 발생한 경우 메시지를 보내는 쪽에서 대기 처리 등을 개별적으로 해주지 않으면 시스템에 문제가 발생되게 됩니다. 한마디로 시스템이 커지면 커질수록 확장성에 있어서 큰 문제가 발생할 수 있다는 점입니다.

그래서 발생된 것이 이 Pub/Sub 모델입니다. 전형적인 Pub/Sub 모델은 프로듀서가 메시지를 컨슈머에게 직접 전달하는 게 아니라 중간의 메시징 시스템에 전달합니다. 이때 메시지와 수선처 ID를 포함시킵니다. 메시징 시스템의 교환기가 메시지의 수신처 ID 값을 확인한 다음 컨슈머들의 큐에 전달합니다. 컨슈머는 자신들의 큐를 모니터링하고 있다가, 큐에 메시지가 전달되면 이 값을 가져갑니다. 이런 시스템은 컨슈머가 장애가 발생한 경우에는 아무런 문제가 발생되지 않으며, 다시 컨슈머가 복귀되면 큐에 있는 메시지를 가져갈 수 있습니다. 한마디로 메시징 시스템만 살아 있다면 프로듀서에서 전달된 메시지가 유실되지 않습니다. 이처럼 중앙에 메시징 시스템을 중심으로 연결되기 때문에 확장성이 용이합니다. 또한 교환기 룰에 의해서 데이터가 정확하게 전달되므로 메시지 데이터 유실의 염려가 없습니다.

Pub/Sub 모델 단점은? 👨🏻‍💻

하지만 Pub/Sub 모델의 단점은 직접 통신을 하지 않기 때문에 메시지가 정확하게 전달되었는지 확인하려면 복잡하며, 중간에 메시징 시스템이 있기 때문에 메시지 전달 속도가 빠르지 않다는 점입니다. 그래서 기존의 Pub/Sub 모델은 대규모 데이터를 전달하기보다는 간단한 데이터를 전송하는 데 주로 사용되었으며, 큰 데이터를 처리하는 조직이나 회사의 경우 성능이 문제가 되었습니다.

카프카의 메시징 시스템은 ? 🧑‍💻

그래서 카프카는 일반적인 Pub/Sub 모델에서 언급되는 문제점인 메시지가 정확하게 전달되었는지 확인하기 위해서 복잡한 것을 풀며, 메시지 전달 속도가 빠르게 하기 위해서 만들었습니다. 메시지 교환 전달의 신뢰성 관리를 프로듀서와 컨슈머 쪽으로 넘기고, 부하가 많이 걸리는 교환기 기능 역시 컨슈머가 만들 수 있게 함으로써 메시징 시스템 내에서의 작업량을 줄이고 이렇게 절약한 작업량을 메시징 전달 성능에 집중시켜서 고성능 메시징 시스템을 만들었습니다.

카프카의 메시지 전달 순서 🧑‍💻

카프카의 메시지 전달 순서를 간단하게 살펴보겠습니다.

  1. 프로듀서는 새로운 메시지를 카프카로 보냅니다.
  2. 프로듀서가 보낸 메시지는 카프카에 컨슈머 큐에 도착해 저장됩니다.
  3. 컨슈머는 카프카 서버에 접속하여 새로운 메시지를 가져갑니다.

마무리 👩‍💻

마지막으로 정리해보자면, 일반적인 통신방법인 일대일, 일대다 등 통신의 단점인 시스템 장애와 확장면에서 불편이 있어 Pub/Sub 모델을 사용해야 하며 이 Pub/Sub 모델의 경우 메시징 시스템이 중심에서 관리함으로 확장성에서 좋지만 전달 속도가 느립니다. 그래서 카프카는 메시지 교환 전달의 신뢰성 관리를 프로듀서와 컨슈머 쪽으로 넘기고, 부하가 많이 걸리는 교환기 기능 역시 컨슈머가 만들 수 있게 함으로써 메시징 시스템 내에서의 작업량을 줄이고 이렇게 절약한 작업량을 메시징 전달 성능에 집중시켜서 고성능 시스템을 만들었습니다.

REFERENCE

해당 글의 모든 레퍼런스는 "카프카, 데이터 플랫폼의 최강자" (고승범, 공용준 지음) 을 알립니다.

https://coupa.ng/b5xV58

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

profile
엉덩이 무거운 개발자가 되기 위해서 몸무게를 찌웠다...

0개의 댓글