이벤트와 메시지
- 메시지
- 메시지는 송수신자간에 전송하는 데이터의 단위
- 메시지 큐는 모든 메시지가 한 번만 전달된다는 것을 보장함
- 이벤트
- 이벤트는 발생한 사실을 알리는 역할을 하며 그 자체로는 명령이 아님
- 이벤트 기반 시스템에서는 이벤트가 발생하면 이를 구독한 모든 수신자에게 이벤트가 전달됨
- 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를 사용해야 하는 상황 : 실시간 알림, 이벤트 브로커, 다수의 수신자에게 동시에 메시지를 전송해야 할 때