[Server/MSA] RabbitMQ, Redis, Kafka 란? 메시지/이벤트 브로커 비교, 특징 및 개념정리



요즘 많은 서비스들은 메시지/이벤트 브로커(RabbitMQ, Redis, Kafka) 를 사용합니다. 메시지/이벤트 브로커(RabbitMQ, Redis, Kafka) 에 대한 개념을 정리해보았습니다.

0. 핵심

  • 서버에서 많은 요청이 한 번에 들어오면 처리하지 못할 수 있습니다. 처리하지 못한 데이터는 손실되어 서비스에 치명적인 영향을 줄 수 있습니다.
  • 따라서, 유저의 요청이 들어오면 일단 요청을 Queue에 넣어 놓고(요청을 쌓아놓고), 서버가 처리할 수 있을 때 데이터를 가져갑니다.
  • 메시지는 삭제되지만 이벤트는 삭제하지 않습니다.
  • 메시지 브로커는 이벤트 브로커가 될 수 없으나, 이벤트 브로커는 메시지 브로커가 될 수 있습니다(메시지는 삭제되고, 이벤트는 삭제되지 않기 때문).
  • 아래 그림에서 메시지 큐 모델Pub/Sub 이벤트 스트림 모델을 구분할 수 있습니다.

image 주석

1. 메시지 브로커

  • 메시지를 받아서 처리하면 짧은 시간 안에 메시지가 삭제됩니다.
  • 손실되면 안되는 요청을 처리할 때에는 주의해야합니다.

1.1. RabbitMQ

  • RabbitMQ 는 오픈 소스 메시지 브로커 소프트웨어입니다.
  • 구성이 쉽고 안정적입니다.
  • 구성
    • 생산자(Producer) 는 요청을 보내는 주체
    • 소비자(Consumer) 는 Producer로부터 메세지를 받아 처리하는 주체
    • exchange : 메세지를 전달하고자 하는 목적지(큐)에 전달하는 주체
    • 큐(queue) : 메세지를 쌓는 주체
  • RabbitMQ는 AMQP를 구현합니다.
    • AMQP(Advanced Message Queuing Protocol, 어드밴스트 메시지 큐잉 프로토콜)는 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜입니다.

1.2. Redis (Remote Dictionary Server)

  • 메모리(Memory) 기반의 딕셔너리(Dictionary) 구조 데이터 관리 시스템입니다.
  • 키-값(key-value) 구조의 비정형 데이터를 저장하는 비관계형 데이터베이스 관리 시스템입니다.
  • 캐시 역할로 많이 사용합니다.
  • 사용자가 많은 서비스에서 데이터 베이스가 과부하될 때, 캐시 역할로 많이 사용됩니다.
  • Single Threaded 기반으로 운영됩니다. 한 번에 하나의 명령만 처리할 수 있습니다.

2. 이벤트 브로커

  • 이벤트를 받아서 처리하면서 이벤트를 삭제하지 않습니다.
  • 손실되면 안되는 요청을 처리할 때 좋습니다.

2.1. Kafka

  • 아파치 카프카(Apache Kafka)는 아파치 소프트웨어 재단이 스칼라로 개발한 오픈 소스 메시지 브로커 프로젝트입니다.
  • 구독 방식을 사용합니다.
  • 비동기식으로 구성되었습니다.

Reference

  • https://cloud.google.com/solutions/event-driven-architecture-pubsub
  • https://hyeo-noo.tistory.com/334