본문으로 바로가기

카프카, 레빗엠큐, 레디스 큐의 차이점

category 기타 TIP 2023. 10. 16. 13:53

세가지의 차이점을 알기전에 아래 내용부터 알아볼 필요가 있다.

⚡ 메시지 플랫폼

애플리케이션, 서비스, 시스템 간에 데이터를 교환하는데 사용되는 중간 소프트웨어 또는 서비스입니다. 메시지 플랫폼은 메시지 큐, 메시지 브로커, 이벤트 버스 등 다양한 형태로 존재할 수 있습니다.

  1. 기본 개념:
  • 메시지: 데이터의 패키지화된 형태입니다. 일반적으로 데이터 본문과 메타데이터(예: 헤더)를 포함합니다.
  • 큐(Queue): 메시지가 저장되는 장소입니다. 큐는 FIFO(First-In-First-Out) 방식으로 동작하여 가장 먼저 들어온 메시지가 가장 먼저 나갑니다.
  • 브로커(Broker): 메시지의 수신과 전송을 관리하는 컴포넌트입니다.
  • 생산자(Producer)/소비자(Consumer): 생산자는 메시지를 생성하고 큐에 넣는 역할을 합니다. 소비자는 큐에서 메시지를 가져와 처리하는 역할을 합니다.
  1. 주요 기능 및 장점:
  • 분산 처리: 여러 애플리케이션 간에 비동기적으로 데이터를 교환하면서 분산 시스템에서의 작업 부하를 분산할 수 있습니다.
  • 탄력성 및 내결함성: 한 시스템에서 문제가 발생해도 해당 문제가 다른 시스템으로 전파되는 것을 막아줍니다.
  • 디커플링: 생산자와 소비자 사이의 의존성을 줄여주므로 개별 컴포넌트나 서비스 수정이 전체 시스템에 영향을 미치는 것을 최소화합니다.
  1. 대표적인 예들:

대중적인 오픈 소스 기반의 메세징 플랫폼들로 Apache Kafka, RabbitMQ, ActiveMQ 등이 있으며 클라우드 기반 서비스로 AWS SQS(Simple Queue Service), Google Cloud Pub/Sub 등이 있습니다.

각각의 플랫폼은 고유의 특성과 장단점을 가지므로 사용할 애플리케이션의 요구사항에 따라 적절한 플랫폼을 선택해야 합니다.

🎈 메시지 브로커

메시지 브로커는 애플리케이션 간에 메시지를 전송하는 중간 역할을 하는 서비스나 소프트웨어입니다. 메시지 브로커는 메시징 패턴(예: point-to-point, publish-subscribe 등)을 사용하여 서로 다른 애플리케이션, 시스템, 서비스 간에 데이터를 교환합니다.

기본적인 작동 원리는 다음과 같습니다:

  1. 생산자(Producer): 생산자는 메시지를 생성하고 이를 브로커에게 보냅니다.
  2. 브로커(Broker): 브로커는 받은 메시지를 큐에 저장합니다.
  3. 소비자(Consumer): 소비자는 브로커에서 메시지를 가져와 처리합니다.

→ 데이터를 보내고 처리하고 삭제한다.

메시지 브로커의 주요 장점 및 기능은 다음과 같습니다:

  • 디커플링: 생산자와 소비자 사이의 의존성을 줄여주므로 개별 컴포넌트나 서비스 수정이 전체 시스템에 영향을 주는 것을 최소화합니다.
  • 유연성 및 확장성: 비동기 처리 방식으로 인해 시스템의 유연성과 확장성이 향상됩니다.
  • 내결함성: 한 시스템에서 문제가 발생해도 해당 문제가 다른 시스템으로 전파되는 것을 막아줍니다.
  • 메세지 지속성: 일부 메세징 브로커들은 디스크나 데이터베이스 등에 메세징 정보를 저장함으로서 중요한 정보의 유실 없이 안정적인 운영을 지원합니다.
  • 컨슈머 이후 즉시 또는 짧은 시간 내에 삭제되는 구조입니다.

대중적인 예들:

많은 기업들에서 대규모 '메시지 기반 미들웨어 아키텍처'에서 사용되어 왔습니다.

미들웨어라는 것은 서비스하는 애플리케이션들을 보다 효율적으로 아키첵처들을 연결하는 요소들로 작동하는 소프트웨어를 뜻합니다.

메시징 플랫폼, 인증플랫폼, DB 같은 것들이 미들웨어로 볼 수 있다.

메시지 브로커에 있는 큐에 데이터를 보내고 받는 프로듀서와 컨슈머를 통해 메시지를 통신하고 네트워크를 맺는 용도로 사용해왔다. (Redis Queue, RabbitMQ)

🎈 이벤트 브로커

이벤트 브로커는 애플리케이션, 서비스, 시스템 간에 이벤트를 교환하는 중간 역할을 하는 서비스나 소프트웨어입니다. 이벤트 브로커는 주로 이벤트 기반 아키텍처에서 사용되며, 특정 상태 변화나 조건 충족 등을 나타내는 이벤트를 생성(발행)하고 처리(구독)합니다.

기본적인 작동 원리는 다음과 같습니다:

  1. 발행자(Publisher): 발행자는 특정 상태 변화나 조건 충족 등을 감지하여 이벤트를 생성하고 브로커에게 보냅니다.
  2. 브로커(Broker): 브로커는 받은 이벤트를 적절한 큐나 토픽에 저장합니다.
  3. 구독자(Subscriber): 구독자는 관심 있는 큐나 토픽에서 이벤트를 가져와 처리합니다.

→ 데이터를 보내고 처리하고 삭제하지 않는다.

이유는 서비스에서 나오는 이벤트를 마치 DB에 저장하듯이 이벤트 브로커의 큐에 저장합니다.

이벤트 브로커의 주요 장점 및 기능은 다음과 같습니다:

  • 디커플링: 발행자와 구독자 사이의 의존성을 줄여주므로 개별 컴포넌트나 서비스 수정이 전체 시스템에 영향을 주는 것을 최소화합니다.
  • 유연성 및 확장성: 비동기 처리 방식으로 인해 시스템의 유연성과 확장성이 향상됩니다.
  • 내결함성: 한 시스템에서 문제가 발생해도 해당 문제가 다른 시스템으로 전파되는 것을 막아줍니다.
  • 실행 순서 보장: 일부 메시지 브로커피라면 메시지가 순차적으로 처리되도록 보장할 수 있습니다.
  • 레코드 관리 : 레코드 하나만 보관하고, 인덱스를 통해 개별 엑세스를 관리합니다.
  • 단일 진실 공급원(SSOT): 딱 한번 일어난 이벤트 데이터를 브로커에 저장함으로서 단일 진실 공급원으로 사용 가능합니다.
  • 장애 복구 가능성 : 장애가 발생했을 때, 장애가 일어난 지점부터 처리가 가능합니다.
  • 대용량 실시간 스트림 데이터 처리 : 많은 양의 실시간 스트림 데이터를 효과적으로 처리할 수 있습니다.

대중적인 예들:

Apache Kafka, Aws 키네시스

⚾ 차이점

메시지 브로커는 이벤트 브로커로 역할을 할 수 없지만 이벤트 브로커는 메시지 브로커 역할을 할 수 있습니다.

이벤트 브로커로 클러스터를 구축하면 이벤트 기반 마이크로 서비스 아키텍처로 발전하는데 아주 중요한 역할을 할 뿐만 아니라 메시지 브로커로서도 사용할 수 있습니다.


:yellow_star: 카프카, 레빗엠큐, 레디스 큐 특징

  1. Apache Kafka:
  • Kafka는 분산 이벤트 스트리밍 플랫폼입니다.
  • 많은 양의 실시간 데이터를 처리하는데 최적화되어 있습니다.
  • 메시지를 '토픽'으로 분류하며, 여러 개의 컨슈머가 동일한 토픽을 독립적으로 소비할 수 있습니다.
  • 메시지는 순서대로 저장되며, 컨슈머는 읽기 시작할 위치를 선택할 수 있습니다(오프셋).
  • 고가용성과 내결함성을 보장합니다.
  1. RabbitMQ:
  • RabbitMQ는 AMQP(Advanced Message Queuing Protocol)을 지원하는 오픈소스 메시지 브로커입니다.
  • Point-to-point, Publish/Subscribe 등 다양한 메시징 패턴을 지원합니다.
  • 큐에 저장된 메시지는 한 번만 소비됩니다 (일부 설정에서 다르게 설정 가능).
  • 내장된 클러스터링 및 높은 가용성 기능이 있으며, 플러그인 아키텍처를 지원하여 확장성이 좋습니다.
  1. Redis Queue(RQ):
  • RQ는 Python에서 작동하는 간단한 Redis 기반 큐 시스템입니다.
  • 작업자 프로세스가 백그라운드 작업을 처리하는데 사용됩니다.
  • RQ는 매우 간단하고 쉬운 API를 제공하지만 Kafka나 RabbitMQ와 같은 고급 기능(메시지 라우팅 등)은 제공하지 않습니다.

사용 사례에 따라 적합한 시스템을 선택해야 합니다.

예를 들어 실시간 스트림 데이터 처리가 필요하다면 Kafka가 적합할 수 있고,

복잡한 메시징 라우팅 요구사항이 있다면 RabbitMQ를 고려해볼 수 있으며,

단순한 백그라운드 작업 큐가 필요하다면 RQ를 사용할 수 있습니다.