Theory
인프라
메시징(이론)

이벤트와 메시지

  • 메시지
    • 메시지는 송수신자간에 전송하는 데이터의 단위
    • 메시지 큐는 모든 메시지가 한 번만 전달된다는 것을 보장
  • 이벤트
    • 이벤트는 발생한 사실을 알리는 역할을 하며 그 자체로는 명령이 아님
    • 이벤트 기반 시스템에서는 이벤트가 발생하면 이를 구독한 모든 수신자에게 이벤트가 전달
    • Kafka와 같은 것을 이벤트 스트리밍 플랫폼이라고 함

Kafka와 RabbitMQ의 차이점

  • RabbitMQ
    • RabbitMQ 메시지 브로커로서, 주로 명령 및 데이터 패킷 전송에 사용
    • 메시지는 큐에 저장되며, 큐에서 수신자가 메시지를 꺼내 처리
    • 메시지 전달 보장을 제공
  • Kafka
    • 분산 이벤트 스트리밍 플랫폼으로서, 이벤트를 로그에 기록하고 스트리밍함
    • 이벤트는 토픽에 기록되며, 구독자들이 이를 실시간으로 처리
    • 높은 처리량과 내구성을 제공

토픽이란

  • 메시지 브로커에서 토픽은 특정 유형의 메시지를 전달하기 위한 논리적인 채널
  • 반면 이벤트 스트리밍 플랫폼에서 토픽은 이벤트 스트림을 분할하고 관리하기 위한 논리적인 단위
  • Kafka에서 토픽은 파티션(partition)으로 나뉘며 각 파티션은 특정 순서대로 이벤트를 저장함
  • 👇 Kafka에 토픽을 생성하고 이벤트를 발생시키는 예시 코드
from kafka import KafkaProducer
 
producer = KafkaProducer(bootstrap_servers='localhost:9092')
 
topic = 'user-activity'
message = b'User logged in'
producer.send(topic, message)
producer.flush()
print(f" [x] Sent message to {topic}")
 
producer.close()

Kafka의 파티션

  • 파티션은 데이터를 여러 서버에 분산시키는 것을 의미함
  • 각 파티션은 브로커라 불리는 개별 서버에 저장됨
  • 예를 들어, 토픽 user-activity가 3개의 파티션으로 나뉜다면 각 파티션은 다른 서버에 분산될 수 있음
  • 파티션 내에서는 이벤트의 순서가 보장되지만 서로 다른 파티션 간에는 순서가 보장되지 않음

AWS SQS와 AWS SNS

  • AWS SQS : Amazon Simple Queue Service
  • AWS SNS : Amazon Simple Notification Service

AWS SQS (Simple Queue Service)

  • SQS는 메시지를 큐에 넣어두고 나중에 이를 읽어 처리할 수 있게 하는 메시지 큐 서비스
  • 프로듀서와 컨슈머가 비동기적으로 통신할 수 있도록 함
  • FIFO(First In First Out) 큐를 사용하면 메시지의 순서를 보장할 수 있음

AWS SNS (Simple Notification Service)

  • SNS는 하나의 메시지를 여러 수신자에게 동시에 전달할 수 있는 메시지 브로커 서비스임
  • 메시지를 주제(topic)에 게시하고 이를 구독한 모든 수신자에게 푸시

SQS와 SNS의 차이점

  • 메시지 전송 방식 : SQS는 메시지를 큐에 넣어두고 컨슈머가 이를 읽어가는 방식(풀 모델), SNS는 메시지를 주제에 게시하고 구독자에게 푸시하는 방식(푸시 모델)임
  • 목적 : SQS는 주로 비동기 작업 처리에, SNS는 실시간 알림 및 이벤트 분배에 적합함
  • 메시지 전달 : SQS는 메시지를 하나의 수신자에게 전달하고, SNS는 여러 수신자에게 동시에 전달함

결론

  • SQS를 사용해야 하는 상황 : 비동기 작업 처리, 작업 분산, 메시지 버퍼링이 필요할 때
  • SNS를 사용해야 하는 상황 : 실시간 알림, 이벤트 브로커, 다수의 수신자에게 동시에 메시지를 전송해야 할 때

Reference