이벤트 중심 아키텍처의 세계에서 효율적인 소통을 위해서는 적절한 메시지 브로커를 선택하는 것이 중요합니다. 가장 인기있는 두 개는 Kafka와 RabbitMQ이며, 각각 장단점이 있습니다. 이 두개는 비슷한 기능을 수행하지만 서로 다른 아키텍처, 성능 및 사용 사례를 가지고 있습니다.
여기서는 두 브로커의 아키텍처 차이점과 성능을 비교하고 Kafka와 RabbitMQ의 몇 가지 일반적인 사용 사례를 살펴봅시다.
아키텍처
[Kafka]
Apache Kafka는 높은 처리량 및 실시간 데이터 처리 기능으로 유명한 오픈 소스 분산 이벤트 스트리밍 플랫폼입니다. Kafka는 프로듀서가 메시지를 작성하고 컨슈머가 해당 주제를 구독하여 메시지를 받는 pub-sub 모델을 따릅니다. Kafka는 메시지를 분산 커밋 로그에 저장하여 높은 확장성과 내결함성을 가능하게 합니다. 이를 통해 높은 처리량과 메시지 리플레이가 가능하여 실시간 데이터 처리 및 이벤트 소싱에 이상적입니다.
Kafka의 아키텍처는 프로듀서, 브로커, 컨슈머의 세 가지 구성 요소로 구성됩니다. 프로듀서는 Kafka 토픽에 대한 메시지를 게시하고, 브로커는 Kafka 클러스터 전반에 걸쳐 데이터를 저장하고 복제합니다. 컨슈머는 하나 이상의 토픽에서 데이터를 읽으며 병렬 처리 및 확장도 가능합니다.
[RabbitMQ]
RabbitMQ는 AMOP(Advanced Message Queuing Protocol)을 구현하는 유연한 오픈 소스 메시지 브로커입니다. 전통적인 message-queue 모델을 따르므로 응용 프로그램이 메시지를 주고 받고 특정 소비자에게 메시지를 전달하여 비동기적으로 통신할 수 있습니다. 이를 통해 메시지 순서 지정이 가능하고 메시지 라우팅의 유연성을 보장하므로 작업 처리 및 마이크로서비스 통신에 적합합니다.
RabbitMQ의 아키텍처는 프로듀서와 컨슈머 사이의 브로커 역할을 하는 central message 브로커를 중심으로 합니다. 메시지 복제 및 보존을 위해 프로듀서는 거래소에 메시지를 보내고 해당 거래소는 미리 정의된 규칙에 따라 메시지를 대기열로 라우팅합니다. 그런 다음 컨슈머는 대기열에서 메시지를 검색하고 처리합니다.
성능
[Kafka]
처리율이 높고 실시간 데이터 스트리밍 시나리오에서 우수하여 뛰어난 확장성과 낮은 지연 시간을 자랑합니다. 초당 수백만 개의 메시지를 처리할 수 있어 빠르고 지속적인 데이터 처리가 필요한 사례에 적합합니다. 여러 브로커에 워크로드를 분산하여 수평적 확장을 가능하게 해 대용량 데이터를 효율적으로 처리합니다. 또한 디스크에 메시지를 지속하여 강력한 내구성을 보장합니다.
[RabbitMQ]
수신 확인 및 메시지 지속서오가 같은 기능을 제공해 신뢰할 수 있는 메시지 전달을 제공합니다. 초당 수천 개의 메시지를 처리할 수 있어 중간 수준의 처리 요구사항을 가진 사용 사례에 적합합니다. 중앙 집중식 아키텍처는 일부 성능 오버헤드를 가질 수 있지만 견고성과 메시지 무결성을 제공합니다. 수직 확장은 가능하지만 수평 확장성은 Kafka에 비해 제한적입니다.
유스케이스
[Kafka]
- 실시간 분석 및 스트리밍 애플리케이션
- 특히 빅테이터와 관련된 이벤트 소싱, 수집 및 로그 집계
- 대용량 메시지 처리를 통한 데이터 파이프라인 및 마이크로서비스 통신
- 높은 확장성과 내결함성을 요구하는 애플리케이션
[RabbitMQ]
- 메트릭 및 알림을 포함한 작업 처리, 서비스 통합, 워크플로우 조정 및 관리
- 마이크로서비스 간 비동기 통신
- 메시지 우선 순위 및 신뢰할 수 있는 메시지 전달 기능을 갖춘 엔터프라이즈 메시징 시스템
- 다양한 애플리케이션 시나리오에서 유용하게 사용
결정하기
- 높은 처리량과 실시간 데이터 처리를 우선시한다 ▶️ Kafka
- 안정적인 메시지 전달이 필요하다 ▶️ RabbitMQ
- 메시지 재생과 로그 집계를 고려한다 ▶️ Kafka
- 대용량 마이크로서비스 커뮤니케이션을 위한 원활한 확장을 찾는다 ▶️ Kafka
출처: https://medium.com/@PubNub/kafka-vs-rabbitmq-choosing-the-right-messaging-broker-78ca02530e63
'레퍼런스' 카테고리의 다른 글
[Medium] 2024 버클리즈 Java SpringBoot 인터뷰 질문 (2) (0) | 2024.04.03 |
---|---|
[Medium] 2024 버클리즈 Java SpringBoot 인터뷰 질문 (1) (0) | 2024.04.01 |
[Medium] ChatGPT에게 Java Streams API를 가르쳐 달라고 요청해보자 (0) | 2024.03.20 |
[Medium] 시스템 디자인 인터뷰의 골든룰 (0) | 2024.03.13 |
[Medium] 클린 코드: Null 반환을 피하는 법 (0) | 2024.03.11 |