메시지 브로커?
대용량 데이터 처리를 위한 미들웨어(서로 다른 어플리케이션이 서로 통신하는데 사용되는 소프트웨어)이다.
메시지 브로커와 이벤트 브로커의 차이점
-
메세지 브로커: 메시지 브로커는 시스템 간의 메시지 전달을 관리하고 조정하는 소프트웨어다. 메시지를 큐에 저장하고, 메시지를 전송하거나 수신하는 시스템 간의 비동기적 통신을 지원한다. 메시지 브로커는 메시지를 일시적으로 저장하여 수신자가 사용할 준비가 될 때까지 보관한다.
-
이벤트 브로커: 이벤트 브로커는 이벤트 기반 아키텍처에서 이벤트를 관리하는 역할을 한다. 이벤트 브로커는 이벤트 소스(프로듀서)로부터 이벤트를 받아 이벤트 핸들러(컨슈머)에게 전달한다. 이벤트 브로커는 주로 이벤트 스트리밍을 지원하며, 실시간으로 데이터를 처리하고 반응하는 데 중점을 둔다.
메시지 브로커 모델의 종류와 특징
-
포인트 투 포인트(Point-to-Point) 모델
- 메시지 큐를 사용하여 하나의 프로듀서가 하나의 컨슈머에게 메시지를 전송한다.
- 메시지는 한 번만 전달되며, 한 컨슈머만 해당 메시지를 처리한다.
- 특징: 단순하고 확실한 메시지 전달 보장, 큐에 쌓인 메시지는 하나의 컨슈머에 의해 처리됨.
-
발행/구독(Publish/Subscribe) 모델
- 토픽을 사용하여 하나의 프로듀서가 여러 컨슈머에게 메시지를 전송한다.
- 여러 구독자가 동일한 토픽의 메시지를 수신하고 처리할 수 있다.
- 특징: 메시지의 광범위한 전파 가능, 여러 구독자가 동시에 메시지를 처리.
메시지 브로커의 동작 개념
메시지 브로커는 메시지가 적재되는 공간인 메시지 큐(Message Queue)를 통해 작동한다. 메시지의 그룹은 토픽(Topic)으로 묶이며, 각 구독자는 특정 토픽에 맞는 메시지만 전달받는다. 프로듀서와 컨슈머는 메시지를 전송하고 수신하는 역할을 수행하며, 메시지 큐는 이들 간의 버퍼 역할을 한다. 이러한 구조 덕분에 수신자는 자신이 원할 때 메시지를 가져갈 수 있으며, 비동기적으로 메시지를 처리할 수 있다.
기존의 데이터 전달 구조에서는 생산자와 전달자가 직접 연결되어 있어, 구독자가 불안정할 경우 데이터가 손실되는 문제가 있었다. 그러나 메시지 브로커를 사용하면 메시지가 큐에 안전하게 적재되어 구독자가 불안정한 상황에서도 메시지가 보존된다.
메시지 브로커의 대표적인 예 : RabbitMQ와 Kafka
RabbitMQ
- AMQP(Advanced Message Queuing Protocol)를 사용하여 메시지를 전송한다.
- 브로커 기반의 메시징 시스템으로, 메시지를 큐에 저장하고 소비자가 처리할 준비가 되었을 때 전달한다.
- 복잡한 라우팅 및 메시지 큐 관리 기능을 제공하며, 메시지의 신뢰성과 전달 보장을 강조한다.
- 메시지 전달 보장이 필수적이다.
- 메시지 처리 순서가 보장되지 않으며, 메시지가 큐에서 삭제되면 영속성을 보장할 수 없다.
- 작은 서비스의 메시지 브로커를 구축하는 데 적합하다.
- 메시지가 성공적으로 전달되었다고 판단하면 큐에서 삭제하기 때문에 이를 다시 재생하기 어렵다.
- 트래픽이 증가하여 메시지가 증가하면 수평적으로 확장하는 데 어려움이 존재한다.
Kafka
- 분산 스트리밍 플랫폼으로, 대용량의 실시간 데이터 스트리밍을 처리하는 데 중점을 둔다.
- 메시지를 토픽에 저장하고, 각 메시지는 오프셋을 통해 순서대로 관리된다.
- 높은 처리량과 내구성을 제공하며, 이벤트 소싱 및 로그 수집과 같은 시나리오에 적합하다.
- 메시지 처리 순서가 보장되며, 메시지의 영속성이 보장된다.
- 스케일 아웃이 중요한 경우에 적합하다.
- 이벤트 스트리밍 플랫폼으로, 메시지를 토픽에 순서대로 기록하며, 토픽을 유지하기 때문에 오류가 나도 이벤트를 다시 재생할 수 있다.
- 클러스터로 실행되며, 여러 브로커가 하나의 카프카 서버 내에서 동작한다.
- 모든 데이터 스트림 처리를 위한 중심 플랫폼 역할을 한다.
정리
RabbitMQ는 큐 기반 메시징 시스템으로 메시지의 신뢰성과 전달 보장을 강조하며, 작은 서비스에 적합하다. Kafka는 대규모 데이터 스트리밍과 이벤트 소싱에 최적화되어 있으며, 높은 처리량과 메시지의 영속성을 보장하는 데 중점을 둔다. 사용 목적과 요구 사항에 따라 두 시스템 중 하나를 선택할 수 있다.