RabbitMQ를 사용했던 경험이 있다면 항상 면접시 질문하는 내용이다
이번에 정리해보기

RabbitMQ
정의 : MSA 등 환경에서 비동기 통신 환경에서 메시지를 큐에 저장하는 오픈소스 기반 소프트웨어
핵심 구성요소 :
- Producer : 메시지를 생성하여 전송하는 전송자
- Broker: 데이터 라우팅 및 저장 서버
Exchange : Direct(1:1 매핑), Topic( 와이드 카드 기반 멀티캐스트 ), Fanout( 브로드 캐스트), Headers( 헤더 속성 기반) 4가지 타입
Producer 의메시지를 영구적, 비영구적 저장하는 서버, consumer 요청시 메시지 전달
- Consumer : 전송자의 메시지를 수신하는 application 혹은 device
장점 및 활용 이유 :
1. 낮은 러닝 커브 : 매우 쉽게 설치 및 운영이 가능하며 진입 장벽이 낮고, 직관적임.
2. 비동기성 : 여러 조리를 동시에 수행해야하는 협동 로봇에 비동기적 스케줄링에 적합
3. 회복성 : 사용자의 실수 및 장애로 인한 시스템 중단에도 로봇 스케줄링 영속적 유지, 이어서 진행 가능
4. 보장성 : 협동로봇이 조리 수행 단계를 손실하지 않아야하는 중요성
5. 낮은 결합성 : 3개의 MSA 구조의 백엔드의 (주문 서버 -> 메인 서버 -> 스케줄링 서버 ) Data Flow에서 결합도를 낮추면서 안정성을 확보 가능
Apache Kafka
정의 : 수십, 수백만의 대용량 이벤트 메시지를 실시간 스트리밍, 수집 처리 소프트웨어
핵심 구성요소 :
- Producer : 메시지를 생성하여 전송하는 전송자
- Cluster : 여러 브로커로 이루어진 데이터 저장 분산 서버
- 브로커 : 실질적 메시지 저장,처리 수행 서버, 여러 브로커와 협력하여 로드밸런싱, 메시지 복제등을 수행
- Topic : 메시지 구분 논리적 카테고리
- 파티션 : Topic을 저장하는 물리적 공간 ( 리더 브로커와 팔로우 브로커 존재 )
- 컨트롤러 : 브로커 중 하나, 컨트롤러는 클러스터 내의 모든 브로커 상태를 모니터링
- Consumer : 전송자의 메시지를 수신하는 application 혹은 device
장점 :
1. 높은 성능 : 수백만 이벤트 실시간 스트리밍, 낮은 지연시
2. 모니터링 : controller를 선출하여 self-healing, 오케스트레이션 가능한 구조
3. 유연성 : 브로커와 파티션을 확장하여 수평적 확장 유연
4. 수많은 커뮤니티 : 서비스 확장성을 고려한 대부분 서비스들이 도입하여 높은 커뮤니티 유지
https://engineering.linecorp.com/ko/blog/how-to-use-kafka-in-line-1
LINE에서 Kafka를 사용하는 방법 - 1편
참고. 이번 블로그는 LINE DEVELOPER DAY 2018에서 Yuto Kawamura 님이 발표한 ‘Multi-Tenancy Kafka cluster for LINE services with 250 billion...
engineering.linecorp.com
결론 :
1. 두 시스템다 비동기적 메시지의 영속성을 보장하는 미들웨어
2. rabbiqmq는 Queue 기반 Kafka는 파일 시스템에 영속적 저장
3. 프로토 타입 개발 상황에서는 러닝커브가 낮은 rabbitmq로 구현 가능함
4. 추후 대용량 데이터 실시간 스트리미이 등 목적이라면 오히려 kafka 적합
5. 시스템상 메시지의 priority 설정이 필요한경우 rabbitmq사용
6. 메시지 지연등 기능 필요시 rabbitmq가 적합