11/5

졸용·2025년 11월 5일

TIL

목록 보기
108/144

🔹 Kafka vs RabbitMQ

Kafka와 RabbitMQ는 모두 메시지 브로커(message broker)로, 분산 시스템 간의 데이터 전달을 돕는 역할을 한다.

그러나 설계 목적과 내부 동작 방식이 다르기 때문에 사용 시나리오도 크게 달라진다.


🔸 핵심 목적 및 사용 방식

구분KafkaRabbitMQ
주 사용 목적대용량 실시간 데이터 스트리밍, 로그 수집, 이벤트 저장요청/응답 기반 메시지 전달, 작업 큐(Work Queue)
처리 방식Publish-Subscribe 모델 + 분산 로그 저장메시지 큐 기반 브로커 패턴
메시지 전달 보장 방식Pull 방식 (소비자가 가져감)Push 방식 (브로커가 푸시)


🔹 아키텍처 구조 및 동작

🔸 Kafka

  • 분산 로그 저장 시스템메시지 브로커 역할을 동시에 수행
  • 메시지를 파일 시스템에 파티션 단위로 저장하여 대량의 이벤트 스트리밍 처리에 최적화
  • 소비자는 오프셋(offset)을 기준으로 원하는 위치의 데이터를 다시 읽을 수 있음 → 재처리가 매우 용이
  • 메시지 보존 기간을 지정하여 오래된 메시지도 유지 가능

🔸 RabbitMQ

  • AMQP 프로토콜 기반 메시지 브로커
  • Queue-Exchange-Binding 구조로 유연한 라우팅 지원 (Direct, Fanout, Topic 등)
  • 메시지는 소비 후 삭제되는 방식이 일반적 → 작업 큐 기반 처리에 적합
  • 메시지를 즉시 전달(Push)하고, 필요 시 ACK/NACK를 통한 신뢰성 보장


🔹 처리 성능 및 확장성

구분KafkaRabbitMQ
처리량 (Throughput)매우 높음 (수백만 TPS까지 확장 가능)중간~높음 (수만~수십만 TPS 정도)
확장성Broker + Partition 수평 확장 용이클러스터링 제공하지만 확장성 면에서 Kafka에 비해 제한적
지연 시간낮은 지연, 고성능 실시간 처리일반적으로 낮지만 Kafka 대비 고성능 스트리밍엔 부적합


🔹 주요 사용 사례

KafkaRabbitMQ
로그 수집 (ELK Stack), IoT 이벤트 처리, Streaming Analytics, MSA 이벤트 버스, CDC 데이터 파이프라인주문 처리 큐, 이메일/알림 처리, 비동기 요청/응답 처리, 작업 분배 (Worker Queue)


🔹 운영 관점

구분KafkaRabbitMQ
구축 난이도비교적 어려움 (Zookeeper 필요 / Kafka KRaft 모드 도입 중)비교적 쉬움
관리 도구Kafka UI, Prometheus, Grafana 등 별도 툴 필요기본 제공 UI, 플러그인 활용 쉬움
메시지 재처리매우 쉬움 (Offset 기반)구현 난이도 중간 (Dead Letter Queue 등 필요)


🔹 정리

  • Kafka는 이벤트 스트림과 데이터 파이프라인 중심의 고성능, 대용량 로그 및 실시간 처리에 특화.
  • RabbitMQ전통적인 메시지 큐잉 시나리오, 예: 비동기 요청/응답 처리, 백그라운드 작업 처리 등에 적합.

필요에 따라 두 시스템을 함께 사용하는 것도 가능하다.
예를 들어, Kafka로 실시간 이벤트를 수집하고, RabbitMQ로 사용자 알림 전달을 처리하는 방식처럼.


🔸 선택 기준 조언

상황추천
대규모 로그/이벤트 수집 및 분석이 필요✅ Kafka
단순한 비동기 작업 처리, 작업 분배✅ RabbitMQ
메시지를 다시 읽고 재처리해야 하는 경우✅ Kafka
복잡한 라우팅 규칙 필요 (Direct, Topic 등)✅ RabbitMQ
profile
꾸준한 공부만이 답이다

0개의 댓글