메시지 큐 (Message Queue)
프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할 때 사용하는 통신 방법
- End-Point 간 직접 통신이 아닌 중간의 Queue를 통해 데이터를 통신
Kafka
- LinedIn에서 개발한 메시지 큐 방식 기반, 분산 메시징 시스템
kafka 용어 설명
- Broker : 각각의 kafka server를 이야기 함
- Topic : Producer에서 전달한 메시지가 저장되는 곳, 메시지들의 카테고리
- Partition : Topic은 여러 파티션으로 구성되어 있음, topic내에서 메시지가 분리되어 실제로 저장
- Offset : 하나의 메시지 단위를 레코드라고 표현, 이러한 레코드들의 ID가 오프셋, 배열의 Index 개념
- Zookeeper : Kafka Cluster에서 분산 메시지 큐의 정보를 관리
- Consumer Group : 토픽을 읽어가기 위해 Customer를 모아놓은 것
kafka의 동작 순서
- Producer에서 데이터를 kafka cluster에 전달
- 지정된 topic내 partition에 메시지를 저장
- 설정된 replication 값에 따라 또 다른 topic내 partition에 복제를 위한 메시지를 저장
- Consumer Group안에 있는 어느 하나의 Consumer가 수신 처리 수행
RabbitMQ
- AMQP 프로토콜을 구현한 메시지 브로커
RabbitMQ 용어 설명
- Exchange : 수신한 메시지에 특정 알고리즘을 적용하거나 메시지를 담게 될 Queue를 찾는 과정
- fanout : 모든 queue에 메시지 전달
- direct : producer에서 전달한 key와 완전히 일치하는 queue에 메시지 전달
- topic : direct와 다르게 전달한 key와 패턴을 정하고 패턴과 일치하는 queue에 메시지 전달
- header : key:value로 이루어진 header값을 기준으로 일치하는 queue에 메시지 전달
- Binding : Exchange의 type에 의해 전달된 메시지를 Queue로 보내는 것
RabbitMQ 동작 순서
- Producer에서 데이터를 Broker에 전달
- Exchage가 어떤 Queue에 저장할지 찾고 해당 Queue에 저장
- 데이터가 저장되고 나서 각각의 Consumer에서 데이터를 가져가고 수신 된 데이터는 삭제
kafka | rabbitMQ | |
데이터 접근 | Pull : Consumer는 메시지 처리를 위해 kafka cluster로 요청 |
Push : 데이터가 발생한 시점에, Queue에서 Consumer로 Push |
방식 | pub/sub방식 생산자 중심적인 설계로 구성, 생성자가 원하는 각 메시지를 게시할 수 있도록 메시지 배포 패턴 |
메시지 브로커 방식 브로커 중심적인 설계로 구성, 지정된 수신인에게 메시지를 확인, 라이팅,저장 및 배달하는 역할 수행· 보장되는 메시지 전달에 초점 |
메시지 삭제 여부 |
Consumer가 메시지를 가져가더라도 계속 유지 | Consumer가 Queue에서 메시지를 가져가면 삭제 |
용도 | 스트리밍 데이터를 저장, 읽기,분석 등에 적합 | 높은 처리량과 안정적인 백그라운드 작업에 적합, 애플리케이션 내부 및 애플리케이션 간의 통신에 적합 |
'ETC' 카테고리의 다른 글
인공지능, 머신러닝, 딥러닝 (0) | 2023.06.15 |
---|---|
EDA(Event Driven Architecture) (0) | 2023.06.14 |
Tokenizer란? (0) | 2023.06.12 |
FastAPI가 뭘까? (0) | 2023.06.09 |
MSA(MicroService Architecture) 의 통신 방법 (0) | 2023.06.07 |