메세징 시스템

메세지라고 불리는 데이터 단위를 보내는 측(publisher 또는 producer)에서 카프카에 토픽이라는 각각의 메시지 저장소에 저장하면 가져가는 측(subscribe, 컨슈머) 이 원하는 토픽에서 데이터를 가져가세 되어있음

중앙에서 메세징시스템서버를 두고 이렇게 메세지를 보내고 받는 형태의 통신을 펍섭 모델이라고 한다.

비동기 메시징 전송 방식으로 발신자의 메세지에는 수신자가 정해져 있지 않는 상태로 발행. 구독을 신청한 수신자만이 정해진 메시지를 받을수 있다.
수신자는 발신자 정보가 없어도 원하는 메시지만을 수신할 수 있다. 이러한 구조 덕분에 다이나믹한 네트워크 토폴로지와 높은 확장성을 확보 할 수 있다.

다대다 통신이 아니라 메시징 시스템을 중심으로 연결되기 때문에 확장성이 용이하다.

교환기의 룰에 의해서 데이터가 수신처의 큐에 정확하게 전달되므로 메시지 데이터 유실의 염려가 없다.

다만 펍섭의 단점은 직접 통신을 하지 않기 때문에 메시지가 정확하게 전달되었는지 확인하려면 코드가 좀더 복잡해지고, 중간에 메시징 시스템이 있기 때문에 메시지 전달 속도가 빠르지 않다는점

원래 pub/sub 모델은 대규모 데이터를 전달하는것보다 간단한 이벤트를 서로 전송하는데 주로 사용됨. 왜냐하면, 큐관리, 큐에 전달되고 가져가는 메시지의 정합성, 전달결과를 정확하게 관리하기 위한 내부 프로세스가 아주 다양하고 복잡하기 때문.

기존의 메시지 시스템은 메시지 보관, 교환, 전달과정에서 신뢰성을 보장하는 것을 중점으로 맞췄기 때문에 속도와 용량은 크게 중요하지않았음.

Kaka는 메세징 시스템이 지닌 성능의 단점을 극복 하기 위해

메시지 교환전달의 신뢰성을 프로듀서와 컨슈머쪽으로 넘기고, 부하가 많이 걸리는 교환기 기능 역시, 컨슈머가 만들수 있게 함으로써 메시징 시스템내에서 작업량을 줄이고, 이렇게 절약한 작업량을 메시징 전달 성능에 집중시켜서 고성능 메시징 시스템을 만들었음.

  • 프로듀서와 컨슈머는 각자의 역할이 정확히 구분됨
  • 기존 메시징 시스템과 동일한 비동기 시스템

메세지 전달 순서

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

카프카의 특징

프로듀서와 컨슈머의 분리

각 서비스 서버들은 모니터링이나 분석 시스템의 상태 유무와 관계 없이 카프카로 메시지를 보내는 역할만 하면되고, 마찬가지로, 분석 시스템들의 서비스들의 상태 유무와 관계 없이 카프카에 저장되어 있는 메시지만 가져 오면 된다.

웹서버나 다른 것이 추가 되더라도 카프카로만 보내면 되기 떄문에 서버 추가에 대한 부담도 줄일 수 있는 장점이 있다.

멀티 프로듀서, 멀티 컨슈머

카프카는 하나의 토픽에 여러 프로듀서 또는 컨슈머들이 접근 가능한 구조로 되어있다.

하나의 프로듀서가 하나의 토픽에만 메시지를 보내는 것이 아니라, 하나 또는 하나 이상의 토픽으로 메시지를 보낼 수 있다.

디스크에 메시지 저장

카프카가 기존의 메시징 시스템과 가장 다른특징 중 하나는 바로 디스크에 메시지를 저장하고 유지하는 것.

일반적인 메시징 시스템들은 컨슈머가 메시지를 읽어가면 큐에서 바로 메시지를 삭제한다.

카프카는 컨슈머가 메시지를 읽어가더라도 정해져 있는 보관 주기 동안 디스크에 메시지를 저장해둠

(컨슈머의 처리가 늦어지더라도 카프카의 디스크에 안전하게 보관되어 있기 때문에 메시지 손실 없이 가져갈 수 있다.)

확장성

카프카는 확장이 매우 용이하도록 설계

카프카 클러스터는 3대의 브로커로 시작해 수십 대의 브로커로 확장 가능하다.

높은 성능

고성능을 유지 하기 위해 카프카는 내부적으로 분산 처리, 배치 처리 등 다양한 기법을 사용

용어 정리

Kafka : 아파키 프로젝트 애플리케이션 이름, 클러스터 구성이 가능하며, 카프카 클러스터라고 부름

Broker : 카프카 애플리케이션이 설치 되어 이는 서버 또는 노드를 말한다.

Topic : 프로듀서와 컨슈머들이 카프카로 보낸 자시들의 메시지를 구분 하기 위한 네임으로 사용한다.

많은 수의 프로듀서, 컨슈머들이 동일한 카프카 를 이용하면, 메시지들이 서로 섞이는데, 토픽이라는 이름으로 구분하여 사용하게 됩니다.

Partition : 병렬처리가 가능하도록 토픽을 나눌 수 있고, 많은 양의 메시지 처리를 위해 파티션의 수를 늘려줄 수 있다.

Producer : 메시지를 생산하여 브로커의 토픽이름으로 보내는 서버 또는 애플리케이션등을 말한다.

Consumer : 브로커의 토픽이름으로 저장된 메시지를 가저가는 서버 또는 애플리케이션

+ Recent posts