MQ
2022.10.24 - [Message Queue] - [Message Queue] MQ란?
[Message Queue] MQ란?
MQ 란? 메시지 지향 미들웨어(Message Oriented Middleware: MOM)은 비동기 메시지를 사용하는 다른 응용 프로그램 사이에서 데이터 송수신을 의미한다. MOM을 구현한 시스템을 메시지 큐(Message Queue: MQ)라고
ryeojin.tistory.com
RabbitMQ와 kafka를 이해하기 위해 메시지 큐에 대한 이해가 필요하다.
메시지 큐(Message Queue)란?
: 프로세스 또는 프로그램 인스턴스가 데이터를 송수신하는 통신 방법. MOM(Messate Oriented Middleware)를 구현한 시스템을 의미한다.
아래는 MQ의 동작원리를 그림으로 표현한 것이다.
1. Producer : 정보 제공자
2. Consumer : 정보를 제공받아 사용하는 자
3. Queue : Producer의 데이터를 임시 저장 및 Cosumer에게 제공하는 곳
MQ에서 메시지는 producer-consumer 간에 직접적으로 통신하는 것이 아니라 중간에 queue를 통해 중개된다.
메시지 흐름 순서
- 메시지 전송
- producer는 해당 메시지를 queue에 추가
- 해당 메시지는 consumer가 메시지를 검색하고 이를 사용하기 위한 작업 전까지 임시 저장
- consumer에 의해 호출
- 해당 메시지는 queue에서 삭제
Kafka
Kafka는 LinkedIn에서 개발된 메시지 큐 방식 기반, 분산 메시징 시스템이다.
kafka의 기본 동작 원리를 그림을 통해 이해하자면 위와 같다고 볼 수 있다.
kafka는 pub-sub 모델 기반으로, 크게 보면 publisher(=producer), subscriber(=consumer), kafka cluster로 구성된다.
kafka 동작 원리
- publisher는 전달하고자 하는 메시지를 topic을 통해 카테고리화 한다.
- subscriber는 원하는 topic을 구독(=subscribe)함으로써 메시지를 읽어온다.
- publisher와 subscriber는 오로지 topic 정보만 알 뿐, 서로에 대해 알지 못한다.
- kafka는 broker들이 하나의 클러스터로 구성되어 동작하도록 설계
- 클러스터 내, broker에 대한 분산처리는 Zookeeper가 담당한다.
kafka 차별점
- 메시지를 파일 시스템에 저장함으로써 영속성 보장
- subscriber가 broker로부터 직접 메시지를 가지고 가는 pull 방식으로 동작
- publisher 중심적인 형태로 많은 양의 데이터를 파티셔닝하는 데에 초점을 맞춘 시스템
- subscriber가 전달 상태를 기억
- 방대한 양의 데이터를 처리할 때 사용
RabbieMQ
RabbitMQ는 AMQP 프로토콜을 구현한 메시지 브로커이다.
- producer : 메시지를 보낸 쪽
- consumer : 메시지를 받는 쪽
- exchange : producer가 전달한 메시지를 queue에 전달하는 역할
- queue : 메시지를 저장하는 버퍼
RabbitMQ에서 메시지는 곧바로 queue에 들어가지 않고 exchange에 전달하면 exchange가 queue에 메시지를 넣는 역할을 수행한다.
RabbitMQ 차별점
- broker 중심적인 형태로 producer와 consume간의 보장되는 메시지 전달에 초점
- 클러스터 구성이 쉽고 Manage UI가 제공되며 플러그인도 제공되어 확장성이 뛰어남
- 데이터 처리보다는 관리적 측면이나 다양한 기능 구현을 위한 서비스 구축을 위해 사용
RabbitMQ vs Kafka
1. Kafka는 pub/sub 방식. RabbitMQ는 메시지 브로커 방식
kafka의 pub/sub 방식은 생산자 중심적인 설계로 구성. 생성자가 원하는 각 메시지를 게시할 수 있도록 하는 메시지 배포 패턴으로 진행
RabbitMQ의 메시지 브로커 방식은 브로커 중심적인 설계로 구성. 지정된 수신인에게 메시지를 확인, 라우팅, 저장 및 배달하는 역할 수행하며 보장되는 메시지 전달에 초점
2. 전달된 메시지에 대한 휘발성
RabbitMQ는 queue에 저장되어 있던 메시지에 대해 Consumer가 가져가게 되면 queue에서 해당 메시지를 삭제한다.
kafka는 생성자로부터 메시지가 들어오면 해당 메시지를 topic으로 분류하고 이를 event streamer에 저장한다. 그 후, 수신인이 특정 topic에 대한 메시지를 가져가더라도 event streamer는 해당 topic을 계속 유지하기 때문에 특정 상황이 발생하더라도 재생이 가능하다.
3. 용도의 차이
kafka는 클러스터를 통해 병렬처리가 주요 차별점인 만큼 방대한 양의 데이터를 처리할 때 장점이 부각된다.
RabbitMQ는 데이터 처리보단 Manage UI를 제공하는 만큼 관리적 측면이나 다양한 기능 구현을 위한 서비스를 구축할 때 장점이 부각된다.
'Message Queue' 카테고리의 다른 글
[Message Queue] MQ란? (1) | 2022.10.24 |
---|