스트림
스트림 (Streams)
RabbitMQ Streams는 영속적·복제되는 데이터 구조로, 큐와 같은 일을 할 수 있어요. 생산자가 보낸 메시지를 버퍼링하고 소비자가 읽어 갑니다. 하지만 스트림은 큐와 두 가지 중요한 점에서 달라요: 메시지를 저장하고 소비하는 방식이 달라요.
append-only 로그 모델
스트림은 메시지가 만료될 때까지 반복해서 읽을 수 있는 append-only 로그를 모델링해요. 스트림은 항상 영속적이고 복제됩니다. 이 동작을 기술적으로는 "비-파괴적 컨슈머 시맨틱(non-destructive consumer semantics)"이라고 불러요.
큐에서는 메시지를 컨슘하면 소비되어 사라지는 반면, 스트림에서는 하나 이상의 컨슈머가 구독해서 같은 메시지를 원하는 만큼 여러 번 읽을 수 있어요. 이벤트 소싱이나 재처리 시나리오에 유리한 특성이에요.
스트림 사용 방법
스트림의 데이터는 RabbitMQ 클라이언트 라이브러리로 쓸 수도 있고, 전용 바이너리 프로토콜 플러그인과 관련 클라이언트로 쓸 수도 있어요. 후자가 스트림 특유의 모든 기능에 접근할 수 있고 최고의 처리량(성능)을 제공하므로 강력히 권장돼요.
스트림 프로토콜 클라이언트가 클러스터 노드에 어떻게 연결해야 하는지는 별도의 Stream Client Connections 가이드에서 다룹니다.
수퍼스트림(파티셔닝된 스트림)
단일 스트림이 감당하기 어려울 만큼 대용량을 처리해야 한다면, 수퍼스트림(superstream)을 쓸 수 있어요. 수퍼스트림은 파티셔닝된 스트림으로, 여러 스트림을 하나의 논리적 단위로 묶어 메시지를 나눠 저장하고 병렬로 처리할 수 있게 해 줘요.