ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kafka, Redis
    🎸 2024. 9. 17. 15:09

    Message Queue

    메세지 지향 미들웨어(MOM: Message Oriented Middleware)를 구현한 시스템으로 프로세스 간의 데이터를 교환할 때 사용하는 기술이다.

    • message는 endpoint 간 직접적으로 통신하지 않고, 중간의 queue를 통해 중개된다.
    • Producer: 정보를 제공하는 자
    • Consumer: 정보를 제공받아 사용하려는 자
    • Queue: Producer의 데이터를 임시 저장 및 Consumer에 제공

     

    Broker

    Message Broker

    publisher가 생산한 메세지를 message queue에 저장하고, 저장된 데이터를 consumer가 가져갈 수 있도록 중간 다리 역할을 수행한다. pub/sub 구조로서, 대표적으로 Redis, RabbitMQ 소프트웨어, GCP의 pubsub, AWS의 SQS 서비스가 있다.

    • 서로 다른 시스템(혹은 소프트웨어) 사이에서 데이터를 비동기 형태로 처리하기 위해 사용한다.
    • 대규모 엔터프라이즈 환경의 미들웨어로서의 기능을 수행한다.
    • consumer가 message queue에서 데이터를 가져가게 되면 즉시 혹은 짧은 시간 내에 큐에서 데이터가 삭제된다.

    Event Broker

    메세지 브로커의 큐 기능을 가지고 있어 메세지 브로커의 역할을 수행할 수 있다. 대표적으로 Kafka, AWS의 kiness 서비스가 있다.

    • publisher가 생산한 event를 처리 후에 바로 삭제하지 않고 저장한다.
    • 즉, 이벤트 시점이 저장되어 있어 consumer가 특정 시점부터 이벤트를 다시 consume할 수 있어 장애 발생 시 처리에 용이하다.
    • 대용량 처리에 있어서 메세지 브로커보다 더 많은 데이터를 처리할 수 있다.

     

    PUB/SUB

     

    Publish/Subscribe(게시자/구독자) 패턴의 약어로, 메세지를 보내는 게시자(publisher)와 메세지를 수신하는 구독자(subscriber) 간의 비동기적인 통신을 가능하게 한다.

    1. 이벤트(메시지)를 발행하는 Publisher가 존재하며, Publisher는 특정 Channel(혹은 Topic)에 이벤트를 전송한다.
    2. 특정 Channel(혹은 Topic)을 구독하는 Subscriber가 존재하며, Publisher에 관계없이 발행된 이벤트를 받을 수 있다.

    Kafka

     

    Kafka는 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 설계된 고성능 분산 이벤트 스트리밍 플랫폼이다.

    Pub-Sub 모델의 메시지 큐 형태로 동작하며 분산환경에 특화되어 있다. 

    1. Producer/Consumer라는 개념으로 작동하며 각각 Publisher/Subscriber와 그 기능이 동일하다. Producer는 Topic에 이벤트를 보내고, 이 이벤트는 Topic의 각 Partition에 분산되어 저장된다.
    2. Topic을 구독하고 있는 Consumer group 내의 Consumer는 각각 1개 이상의 partition으로부터 이벤트를 가져온다. publisher와 subscriber는 오로지 topic 정보만 알 뿐, 서로에 대해 알지 못한다.
      * 만약 partition 개수보다 consumer 개수가 많다면, 아무 일도 하지 않는 consumer가 생기기 때문에, 항상 partition 수를 consumer보다 같거나 크게 해주는 것이 좋다.
    3. kafka는 broker들이 하나의 클러스터로 구성되어 동작하도록 설계한다. 클러스터 내의 broker에 대한 분산처리는 ZooKeeper가 담당한다.

    한 이벤트에 대해 한 번의 기능만 작동되어야 한다면 Kafka를 사용하는 것이 유리하다.

    Redis

     

    Redis는 키(Key) - 값(Value) 쌍의 해시 맵과 같은 구조를 가진 데이터베이스, 캐시, 메시지 브로커 및 스트리밍 엔진으로 사용되는 인메모리 데이터 구조 저장소이자 비관계형(NoSQL) 데이터베이스 관리 시스템(DBMS)이다.

    1. Redis에는 그룹이라는 개념이 존재하지 않고, 각 subscriber가 channel을 구독하고 있다.
    2. Channel은 이벤트를 저장하지 않는다. 만일 Channel에 이벤트가 도착했을 때, 해당 채널의 Subscriber가 존재하지 않는다면, 이벤트는 사라진다.
    3. Redis의 Channel은 말 그대로, TV의 Channel을 생각하면 된다. 하루 종일 TV에서는 수백 개의 채널에서 방송이 방영된다. 각 방송사(Publisher)에서 방영하는 라이브 방송은, 해당 채널을 시청 중일 때만 볼 수 있다. 또한 같은 시간대에 같은 채널의 시청자(Subscriber)들은 모두 같은 방송을 볼 수 있다.

    발행된 이벤트에 대해 모든 Subscriber에서 특정 작업이 발생되어야 하는 경우 Redis를 사용하는 것이 유리하다.

     

     

    참조

     

    Kafka, Redis, RabbitMQ

    회사에서 프로젝트를 진행하다가 실시간 대용량 데이터 처리를 위해 Kafka를 도입하려고 하는데..

    velog.io