티스토리 뷰
최근에 RabbitMQ를 이용한 프로젝트를 경험했었는데
Kafka와 RabbitMQ를 비교하며 개념을 정리해보려고 합니다.
Kafka와 RabbitMQ를 비교하기 전에 메시지 큐에 대해서 간단히 정리해보겠습니다.
_메시지 큐의 장점
-
비동기 (Asynchronous) : Queue에 넣기 때문에 나중에 처리 가능
-
비동조 (Decoupling) : 애플리케이션과 분리
-
탄력성 (Resilience) : 일부가 실패 시 전체에 영향을 받지 않음
-
과잉 (Redundancy) : 실패할 경우 재실행 가능
-
보증 (Guarantees) : 작업이 처리된 걸 확인 가능
-
확장성 (Scalable) : 다수의 프로세스들이 큐에 메시지를 보낼 수 있음
_메시지 큐 사용처
-
다른 곳의 API로 부터 데이터 송수신이 가능
-
다양한 애플리케이션에서 비동기 통신을 할 수 있음
-
이메일 발송 및 문서 업로드가 가능
-
많은 양의 프로세스들을 처리 가능
_메시지 큐 종류
-
Spring Intergration, JMS, ActiveMQ, RabbitMQ, Kafka
_Kafka 란?
Apache Kafka(아파치 카프카)는 LinkedIn에서 개발된 분산 메시징 시스템으로 2011년에 오픈소스로 공개되었다.
대용량의 실시간 로그처리에 특화된 아키텍쳐 설계를 통하여 기존 메시징 시스템보다 우수한 TPS를 보여주고 있다.
_Kafka의 구성 요소 및 동작
-
publish-subscribe 모델을 기반으로 동작하며 크게 producer, consumer, broker로 구성
-
pub-sub 모델은 메시지를 특정 수신자에게 직접적으로 보내주는 시스템이 아님
-
publisher는 메시지를 topic을 통해서 카테고리화
-
분류된 메세지를 받기 위해 subscriber는 그 해당 topic을 subscribe함으로써 메세지를 읽어올 수 있음
-
즉, publisher, subscriber 모두 topic에 대한 정보만 알고 있음 (publisher/subscriber는 서로 모르는 상태)
-
Kafka는 확장성(scale-out)과 고가용성(high availability)을 위하여 broker들이 클러스터로 구성되어 동작하도록 설계
-
심지어 broker가 1개 밖에 없을 때에도 클러스터로 동작
-
-
클러스터 내의 broker에 대한 분산처리는 ZooKeeper가 담당
topic/partition
-
메시지는 topic으로 분류되고, topic은 여러개의 partition으로 나뉘어진다.
-
partition 내의 한 칸은 log라고 불린다.
-
하나의 topic에 여러 개의 partition을 나눠서 메시지를 쓰는 이유? 병렬로 처리하기 위하여 분산 저장을 한다.
-
한 번 늘린 partition은 줄일 수 없으므로 충분히 고려하여 늘려야함
-
partition을 늘렸을 때, 메시지는 Round-Robin 방식으로 쓰여짐
-
broker/zookeeper
-
broker는 kafka의 서버를 말함
-
zookeeper는 문산 메세지 큐의 정보를 관리하는 역할 (반드시 필요)
_Kafka의 차별점/장점
-
기존 메시징 시스템과는 달리 메시지를 파일 시스템에 저장함으로 영속성(durability)이 보장
-
consumer가 broker로 부터 직접 메시지를 가지고 가는 pull 방식으로 동작
-
producer 중심적, 많은 양의 데이터를 파티셔닝하는데에 기반을 둔다
-
consumer가 전달 상태를 기억함
- 어마어마한 양의 데이터를 처리해야 할 때 사용
_RabbitMQ 란?
RabbitMQ는 AMQP 프로토콜을 구현한 메세지 브로커입니다. 쉽게 말해, 시스템 간에 메세지를 전달해주는 서비스입니다.
_RabbitMQ의 구성 요소 및 동작
-
Publisher : 메세지를 보내는 Application
-
Exchange : Producer가 전달한 메세지를 Queue에 전달하는 역할
-
Queue : 메세지를 저장하는 버퍼
-
Consumer : 메세지를 받는 User Application
-
Message는 바로 Queue로 들어가지 않고, Producer가 Exchange에게 Message를 보냄
-
erlang과 java언어로 만들어짐
_RabbitMQ의 차별점/장점
-
유연한 라우팅이 가능
-
제품 성숙도가 높은편
-
개방형 프로토콜을 위한 AMQP(Advanced Message Queuing Protocol)를 구현위해 개발
-
AMQP : Client어플리케이션과 middleware broker와의 메시지를 주고받기 위한 프로토콜
-
-
broker 중심적, producer/consumer간의 보장되는 메세지 전달에 초점
-
클러스터 구성이 쉽고, Manage UI가 제공되며 플러그인도 제공되어 확장성이 뛰어남
- borker상에서 전달 상태를 확인하기 위한 메세지 표식을 사용
- 데이터 처리보단 관리적 측면이나 다양한 기능 구현을 위한 서비스를 구축할 때 사용
'etc' 카테고리의 다른 글
[DB] 트랜잭션 특징, 격리 수준, 관련 문제점 (0) | 2020.02.19 |
---|---|
[DB] NoSQL - 특징, 종류, 데이터 모델링 (0) | 2020.02.17 |
[디자인패턴] 싱글톤 패턴/Singleton Pattern (1) | 2020.02.14 |
[디자인패턴] 옵저버 패턴/Observer Pattern (0) | 2019.12.24 |
- Total
- Today
- Yesterday
- 윈도우
- DATABASE
- RelativeLayout
- 백준
- 백준알고리즘
- handshake
- OS
- listview
- 퀵정렬
- 정렬 알고리즘
- 네트워크
- 알고리즘
- 안드로이드
- Android
- C
- 스프링
- WinDbg
- ConstraintLayout
- adapter
- debug
- frameLayout
- 스프링부트
- C++
- BOJ
- 이진탐색트리
- windows
- LinearLayout
- HTTP
- 운영체제
- layout
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |