상황
프로젝트에 있어서 메시지 큐를 도입해야 하는 상황이 발생했다.
그래서 어떤 기술을 도입할지 고민하면서 해당 두 기술을 비교해봤다.
Kafka와 RabbitMQ 비교 및 차이점
메시지 브로커 (Message Broker) 정의
메시지 브로커는 애플리케이션 간의 통신을 처리하고 메시지를 전달하는 중개자 역할을 합니다. 이를 통해 메시지를 보내는 애플리케이션(프로듀서)과 받는 애플리케이션(컨슈머) 간의 메시지 전송을 관리합니다.
메시지 브로커의 주요 기능
- 비동기 통신: 프로듀서와 컨슈머가 독립적으로 작동하여 비동기적으로 메시지를 주고받을 수 있습니다.
- 발행/구독 모델: 메시지를 주제(topic)나 큐(queue)에 발행하고 여러 컨슈머가 이를 구독하여 처리할 수 있습니다.
- 로드 밸런싱: 여러 컨슈머 간 메시지를 균등하게 분배하여 시스템 부하를 분산합니다.
- 내구성 및 안정성: 메시지를 안전하게 저장하여 데이터 손실을 방지합니다.
- 확장성: 새로운 프로듀서나 컨슈머를 쉽게 추가하여 시스템 확장이 가능합니다.
RabbitMQ와 Kafka의 비유적 설명
- RabbitMQ: "배달원이 집까지 직접 가져가는" 방식. 각 메시지는 큐에 저장되며 특정 컨슈머가 이를 처리합니다. 메시지가 발송되면 하나의 컨슈머가 해당 메시지를 수신하여 처리하는 구조입니다.
- Kafka: "도서관에 책을 올리고 사용자가 찾아가는" 방식. 메시지가 기록되어 여러 컨슈머가 필요할 때 가져갈 수 있습니다. 메시지는 디스크에 저장되며 필요 시 여러 번 읽을 수 있습니다.
RabbitMQ와 Kafka의 차이점
RabbitMQ (큐 기반)Kafka (발행/구독 모델)
메시지 전달 방식 | 배달원이 집까지 가져가는 것처럼, 메시지를 즉시 소비자가 받아서 처리 | 도서관에 책을 올려두고 소비자가 가져가는 느낌 |
메시지 저장 | 메모리에 메시지를 저장하고 즉시 처리, 디스크 저장은 선택적 | 모든 메시지를 디스크에 저장, 여러 소비자가 메시지 구독 가능 |
성능 및 확장성 | 주로 소규모 메시징 시스템에서 빠르게 처리, 큐 크기 제한에 영향을 받을 수 있음 | 분산 시스템으로 대규모 데이터를 효율적으로 처리하고 확장 가능 |
사용 사례 | 실시간 메시지 처리, 빠른 응답 시간 요구 | 대용량 데이터 스트리밍, 이벤트 소싱, 로그 처리 |
주요 특징 | 복잡한 메시지 라우팅 가능, 지연이 적음 | 높은 내구성 및 안정성, 메시지를 여러 번 재사용 가능 |
RabbitMQ의 장점
- 빠른 응답 시간: 실시간으로 빠르게 처리해야 하는 메시지들에 적합.
- 복잡한 라우팅: 다양한 규칙에 따라 메시지를 특정 컨슈머에게 보낼 수 있음.
- 저지연: 메시지 전달 지연이 적음.
Kafka의 장점
- 대용량 데이터 처리: 초당 수백만 건 이상의 메시지 처리 가능.
- 이벤트 소싱(Event Sourcing): 과거 메시지 기록을 여러 컨슈머가 필요할 때 조회할 수 있음.
- 확장성: 대규모 분산 시스템에서 처리량을 쉽게 확장할 수 있음.
- 내구성 및 안정성: 메시지를 장기 저장하고 재처리 가능.
RabbitMQ vs Kafka 사용 사례 요약
- RabbitMQ: 낮은 지연 시간이 중요하고 실시간 처리가 요구되는 시스템 (예: 실시간 알림 시스템).
- Kafka: 대규모 데이터 스트리밍, 로그 수집 및 처리, 이벤트 소싱과 같은 대용량 데이터 처리 시스템 (예: 데이터 파이프라인).