Kafka vs RabbitMQ ?

김슭삵·2025년 5월 26일
post-thumbnail

들어가며

MSA 환경에서 메시지 브로커 선택은 시스템 성능을 좌우하는 중요한 결정입니다. Apache Kafka와 RabbitMQ는 각각 다른 강점을 가진 대표적인 메시지 브로커입니다. 이번 글에서는 두 도구의 차이점과 최적의 선택 기준을 알아보겠습니다.

기본 개념 비교

Apache Kafka: 분산 스트리밍 플랫폼

철학: "모든 데이터는 스트림이다"

  • 대용량 실시간 데이터 스트림 처리에 특화
  • 메시지를 디스크에 영구 저장 (기본 7일)
  • Pull 방식으로 Consumer가 메시지를 가져옴

RabbitMQ: 전통적 메시지 브로커

철학: "메시지 전달의 신뢰성과 유연성"

  • 복잡한 라우팅과 메시지 전달 보장에 중점
  • 메시지 소비 후 큐에서 제거
  • Push 방식으로 Broker가 Consumer에게 메시지 전달

주요 차이점 비교

1. 성능 및 처리량

항목KafkaRabbitMQ
처리량초당 수백만 메시지초당 수만~수십만 메시지
지연시간2-5ms (평균)1-5ms (평균)
데이터 보관TB 단위 장기 보관GB 단위 임시 보관

2. 메시지 처리 방식

Kafka: 스트리밍 처리

@KafkaListener(topics = "order-events")
public void processOrder(OrderEvent event) {
    // 배치로 처리, 같은 메시지를 여러 Consumer가 소비 가능
}

RabbitMQ: 큐 기반 처리

@RabbitListener(queues = "order.queue")
public void processOrder(OrderEvent event) {
    // 즉시 처리, 메시지 소비 후 큐에서 제거
}

3. 라우팅 복잡성

Kafka: 단순한 토픽 기반

  • 토픽과 파티션을 통한 간단한 라우팅
  • 설정이 단순하고 명확

RabbitMQ: 복잡하고 유연한 라우팅

// 복잡한 조건부 라우팅 가능
@Bean
public Binding urgentOrderBinding() {
    return BindingBuilder
        .bind(urgentOrderQueue())
        .to(orderExchange())
        .with("order.urgent.*");
}

실제 사용 사례

Kafka가 적합한 경우

대용량 실시간 데이터 처리

  • 사용자 클릭 이벤트 수집 및 분석
  • IoT 센서 데이터 수집
  • 로그 수집 및 모니터링

이벤트 소싱 및 데이터 파이프라인

  • 금융 거래 이력 관리
  • 데이터 웨어하우스 ETL
  • 실시간 추천 시스템

히스토리 데이터 재처리 필요

  • 과거 데이터 재분석
  • 새로운 서비스 추가 시 기존 데이터 처리

RabbitMQ가 적합한 경우

복잡한 워크플로우

  • 우선순위별 작업 처리
  • 조건부 메시지 라우팅
  • 작업 큐 시스템

즉시 처리가 중요한 경우

  • 실시간 알림 시스템
  • 이메일 발송 시스템
  • 채팅 및 메시징

RPC 패턴 구현

  • 마이크로서비스 간 동기적 통신
  • 요청-응답 패턴

간단한 선택 가이드

🚀 Kafka를 선택하세요

  • 초당 10만 건 이상의 대용량 처리 필요
  • 실시간 분석 및 빅데이터 파이프라인 구축
  • 메시지 히스토리 보관 및 재처리 필요
  • 이벤트 소싱 패턴 적용

🎯 RabbitMQ를 선택하세요

  • 복잡한 라우팅 로직 필요
  • 즉시 처리가 중요한 알림 시스템
  • 전통적인 작업 큐 패턴 적용
  • 팀이 메시지 큐에 익숙함

⚖️ 하이브리드 접근법

// 대용량 이벤트는 Kafka
kafkaTemplate.send("user-activity", event);

// 즉시 알림은 RabbitMQ
rabbitTemplate.convertAndSend("urgent.notifications", event);

학습 곡선 및 운영 복잡성

Kafka

  • 학습 난이도: 높음
  • 운영 복잡성: 높음 (분산 시스템 관리)
  • 확장성: 매우 우수

RabbitMQ

  • 학습 난이도: 중간
  • 운영 복잡성: 중간 (직관적인 관리 UI)
  • 확장성: 제한적

결론

요구사항추천 도구
대용량 실시간 분석Kafka
복잡한 비즈니스 로직RabbitMQ
이벤트 소싱Kafka
작업 큐 시스템RabbitMQ
IoT 데이터 수집Kafka
실시간 알림RabbitMQ

핵심 판단 기준

  1. 처리량: 대용량이 필요하면 Kafka
  2. 라우팅: 복잡한 조건이 필요하면 RabbitMQ
  3. 데이터 보관: 히스토리가 필요하면 Kafka
  4. 즉시성: 실시간 처리가 중요하면 RabbitMQ
profile
비전공자의 개발 적응기

0개의 댓글