본문 바로가기
개발

Message Brokers :: RabbitMQ와 Kafka

by 시롱케이 2024. 8. 20.

메세지 브로커로 많이 쓰는 RabbitMQ와 Kafka가 어떤 차이가 있는지 보자.

 

RabbitMQ는 Message Broker로 Queue를 통해서 전달하는 방면에 Kafka는 정확하게 말하면 Event Broker로 로그 파일 기반으로 메세지를 관리한다. 이벤트 브로커지만 메세지 브로커의 역할도 가능하다고 보면 된다.

 

실제 동작과 관련해선 메세지 처리방식, 메세지 영속성 등에 차이가 있다.

아래에 좀 더 자세히 정리해보겠다.

 

RabbitMQ

AMQP (Advanced Message Queueing Protocol)를 따르는 오픈소스 메세지 브로커다.

 

AMQP

Advanced Message Queueing Protocol의 약자로 MQ (Message Queueing)에 기반한 표준 프로토콜이다.

메세지 지향 미들웨어를 위한 통신 프로토콜로 플랫폼에 의존하지 않고 서로 다른 네트워크간 통신이 가능하게 하기 위해 등장했다.

AMQP를 구현한 대표적인 메세지 브로커가 RabbitMQ다.

 

AMQP의 주요 정의 요소는 아래와 같다.

  • 메세지 지향
  • 라우팅: P2P(peer to peer), Pub-Sub
  • 신뢰성
  • 보안

이에 관해선 RabbitMQ 구조를 보면 이해하기 쉬울 것이다.

 

RabbitMQ의 동작

 

구성요소

RabbitMQ 메세지 전달 과정에서 주요 객체는 3가지가 있다.

  • Producer: 메세지를 발행하는 주체
  • Broker: 메세지를 큐로 관리하는 서버
  • Consumer: 메세지 수신자

 

메세지 Queue에 올리는 방식

Broker 안에서 메세지를 큐에 추가하는 과정은 exchange, queue, binding로 이루어져 있다.

exchange와 binding이 무엇인지 간단하게 살펴보면 아래와 같다.

 

exchange

exchange란 Producer로부터 메세지를 받아서 어느 큐로 라우팅할지 결정하는 곳이다.

Producer는 큐에 직접 메세지를 올릴 수 없고 무조건 exchange를 통해야 한다.

 

binding

binding은 exchange와 queue의 관계라고 보면 된다. 좀 더 자세하게는 exchange에서 queue로 어떤 규칙으로 라우팅 할 것인가에 대한 정의다.

 

 

exchange는 유형에 따라 다른 방식으로 라우팅을 한다.

  • Direct: Routing Key를 두고 라우팅 키가 정확히 일치하는 큐에 메세지 전송
  • Topic: Routing Key 패턴이 일치하는 큐에 메세지 전송
  • Fanout: 해당 exchange에 등록된(바인딩된) 모든 큐에 메세지 전송
  • Headers: 메세지의 헤더값을 보고 미리 정해둔 header 기준에 부합하는 큐에 메세지 전송

Topic Exchange에서 패턴 일치하는 큐라는 것은 패턴 매칭으로 해당하는 큐에 전달한다는 의미다.

라우팅 키의 패턴은 마침표(.)로 구분된 단어로 조합하며, "msg.*"이라는 패턴으로 하나 이상의 큐에 전달이 가능하다.

 

Queue 정의

어느 큐를 둘지 미리 정의해두거나 자동 생성될 수 있게 선언해둘 수 있다.

예를 들어 상품 관련 큐, 장바구니 관련 큐 등 용도에 따라 구분해서 정의해둘 수 있다.

용도를 나눠 구분해뒀기에 exchange에서 해당하는 큐를 찾아 라우팅할 수 있는 것이다.

 

메세지 소비 방식

큐에 올라간 메세지는 기본적으로 FIFO(First In, First Out)에 따라 Consumer에게 전달된다.

순서가 보장된다고 이해할 수 있다.

다만, Consumer가 둘 이상이거나 메세지에 우선순위가 있는 상황, Consumer가 메세지 처리에 실패해서 메세지를 재전송하는 상황 등에 의해 순서는 변경될 수 있다.

 

Consumer가 둘 이상이라면 Round-Robin 방식(공평하게 분배)으로 메세지를 전달하고

나중에 들어온 메세지이더라도 메세지 우선순위가 높거나, 재전송 메세지라면 먼저 전달될 수 있다.

 

 

 

 

..마저 작성 중..

 

 

'개발' 카테고리의 다른 글

배포 서버 구성하기 (1) - 배포 서버 ec2 올리기  (1) 2024.08.06