Redis, RabbitMQ, Kafka의 차이점

Y_Sevin·2024년 4월 26일
0

메시지 플랫폼은 다양한 시스템 간의 메시지를 전달하고 처리하는 데 중요한 역할을 합니다. Redis, RabbitMQ, Kafka는 가장 많이 사용되는 메시지 브로커 및 이벤트 브로커 중 하나로, 각기 다른 특성과 장점을 가지고 있습니다.

메시지 브로커

메시지 브로커는 대규모 메시지 기반 미들웨어 아키텍처에서 사용됩니다. 주된 특징은 메시지를 받아서 적절히 처리한 후 짧은 시간 내에 메시지가 삭제된다는 점입니다.

이벤트 브로커

이벤트 브로커는 메시지나 이벤트를 하나만 보관하고 인덱스를 통해 개별 액세스를 관리합니다. 주요 특징은 메시지가 삭제되지 않고, 저장된 이벤트를 통해 장애가 발생했을 때 재처리가 가능하며, 많은 양의 실시간 스트림 데이터를 효과적으로 처리할 수 있다는 점입니다.

Redis와 RabbitMQ는 메시지 브로커에 속하고, Kafka는 이벤트 브로커에 속합니다.

Redis

Redis는 인메모리 데이터 구조 서버로서, Pub/Sub 메시지 브로커 기능을 제공합니다.

  • 구조: Publisher가 특정 Channel(Topic)에 이벤트를 전송하고, Subscriber가 해당 Channel을 구독하여 이벤트를 받습니다.
  • 특징: Redis의 Pub/Sub 시스템은 고도화된 기능을 제공하지 않지만, 인메모리DB의 특성을 살려 단순하지만 가볍고 빠른 Pub/Sub 기능을 제공합니다. 이벤트가 저장되지 않기 때문에, Subscriber가 없는 Channel에 도착한 이벤트는 사라집니다.
  • 사용 사례: 지속성이 필요하지 않은 단기 메시지에 적합하며, 매우 빠른 서비스가 요구되는 경우에 사용됩니다.

RabbitMQ

RabbitMQ는 오픈 소스 메시지 브로커로, 메시지 큐잉과 Pub/Sub을 모두 지원합니다.

  • 구조: Producer가 메시지를 보내면, Exchange가 메시지를 목적지 큐에 맞게 전달하고, Consumer가 해당 큐에서 메시지를 받아 사용합니다.
  • 특징: RabbitMQ는 메시지 라우팅 키를 통해 복잡한 메시지 라우팅을 지원하며, 지정된 Consumer에게 신뢰성 있게 메시지를 전달합니다. 빠르고 쉽게 구성할 수 있으며, 라우팅이 매우 유연합니다.
  • 사용 사례: 복잡한 라우팅이 필요하거나, 높은 신뢰성이 요구되는 경우에 적합합니다.

Kafka

Kafka는 Pub/Sub 시스템 모델과 MQ를 혼합해서 사용하는 이벤트 브로커입니다.

  • 구조: Kafka 클러스터를 중심으로 Producer와 Consumer가 데이터를 비동기로 push하고 pull합니다.
  • 특징: Kafka는 메시지 전달의 신뢰성을 Producer와 Consumer 쪽으로 넘기고, 고성능 메시징 시스템을 제공합니다. 메시지를 디스크에 저장하여 내구성을 보장하며, 복제를 통해 데이터의 신뢰성을 확보합니다.
  • 사용 사례: 대규모 트래픽이 예상되거나, 많은 확장이 예상될 때 적합합니다.

Kafka가 다른 메시징 시스템과 차별화 되는 점은 메시지 큐가 영속성을 갖는다는점이다. 전송된 데이터는 설정된 기간이나 크기 제한에 도달하기 전까지는 저장된다. 따라서 한번 소비 되어도 설정한 제한을 초과하지 않는 이상은 메시지가 사라지지 않는다. 여러 번 소비되거나 재처리될 수 있으며 이는 설정으로 조정가능하다.
RabbitMQ 에서 메시지는 수신하는 application 이 연결되거나 queue에서 메시지를 수신할때까지 저장된다. client는 메시지를 수신하거나 메시지 처리를 끝내면 메시지를 ack(acknowledge - 확인) 처리할 수 있다. 앞에서 말한 두 경우 모두 메시지가 ack 처리되면 queue에서 사라진다.

요약

특성/메시지 시스템RedisRabbitMQKafka
역할메시지 브로커메시지 브로커이벤트 브로커
특징메모리 기반, 빠른 처리 속도쉬운 구성, 복잡한 라우팅 지원비동기식 Pub/Sub, 분산 처리, 생산자 중심 설계
적합한 상황지속성이 필요 없는 단기 메시지, 빠른 서비스복잡한 라우팅 필요, 높은 신뢰성 요구대규모 트래픽, 확장성 요구

각 메시지 플랫폼의 고유한 특성과 사용 사례를 이해하고, 특정 요구사항에 맞춰 적절한 선택을 하는 것이 중요합니다. Redis는 빠르고 간단한 메시지 처리가 필요할 때, RabbitMQ는 복잡한 라우팅과 높은 신뢰성이 요구될 때, Kafka는 대규모 데이터 처리와 확장이 필요한 경우에 적합합니다.

Kafka가 RabbitMQ에 비해서 메시지 전송이 실패했을 때에 대한 대비책이 더 잘되어 있다
카프카는 높은 처리량과 낮은 지연 시간을 제공하여 실시간 데이터 처리를 가능
RabbitMQ는 메시지의 손실을 최소화하고, 메시지가 정확하게 전달되도록 보장

profile
매일은 아니더라도 꾸준히 올리자는 마음으로 시작하는 개발블로그😎

0개의 댓글