0.들어가기전에
- MSA에서는 데이터 송수신 방법으로 메시징 시스템을 사용한다.
- 회사 프로젝트 내에서 사업장과 중앙서버가 통신할 때 MQ, 토픽 등의 용어가 나와 이에 대해 공부 하다가 메시징시스템을 공부하게 되었다.
- 요즘 기업들 자격요건란에 Kafka란 단어가 많이 나와서 적어도 뭔지는 알아야 겠다는 생각에..
- 카프카가 이런 것이다. 정도의 개념을 잡는 것이 목적이기에 너무 깊게 들어가진 않았다. (더 깊게는 앞으로 공부할 예정,,)
1.메시징 시스템
1-1. 메시징 시스템의 개념
- 메시징 시스템의 종류에는 Kafka, RabbitMQ, Active MQ, AWS SQS, JAVA JMS 등이 있다
- MSA에서는 시스템간의 호출이 많기 때문에 결합도를 낮추기 위해서 메시징 시스템을 사용한다
- 어플리케이션 간에 메시지를 교환하기 위해 사용되는 시스템.
- Point to Point 방식, Pub/Sub 방식 → 두 가지 방식이 존재함
1-2.종류
- Point to Point 방식
- 보내는 사람이 큐를 통해서 메시지를 전달하면 받는 사람이 큐에서 하나씩 꺼내 읽는 방식
- Pub/Sub 방식
- Publisher(게시자)가 topic에 메시지를 보내면, 해당 topic을 구독해놓은 Subscriber(구독자) 모두 에게 메시지가 전송되는 방식.
1-3.용어 정리
- MOM (Message Oriented Middleware, 메시지 지향 미들웨어)
- 독립된 애플리케이션 간에 데이터를 주고 받을 수 있도록 하는 시스템 디자인.
- 비동기로 메시지를 전달 하는 것이 특징.
- Queue, Broadcast, Multicast 등의 방식으로 메시지 전달.
- Pub/Sub 구조
- Message Broker
- 메시지 처리 또는 메시지 수신자에게 메시지를 전달하는 시스템이며, 일반적으로 MOM을 기반으로 구축됨
- MOM의 한 종류
- MQ (Message Queue, 메시지 큐)
- Message Broker와 MOM을 구현한 소프트웨어( RabbitMQ, ActiveMQ, kafka 등..)
- MOM은 메시지 전송 보장을 해야하므로 AMQP를 구현함
- AMQP ( Advanced Message Queueing Protocol )
- 메시지를 안정적으로 주고받기 위한 인터넷 프로토콜
2.Kafka
- Kafka는 메시징 시스템의 한 종류. 카프카의 브로커는 토픽을 기준으로 메시지를 관리한다.
메시지를 보내는 측에서 토픽이라는 메시지 저장소에 메시지를 저장하고, 메시지를 가져가는 측
에서 원하는 토픽에서 메시지를 가져가서 처리하게 된다.
중앙에 메시징 시스템 서버를 두고 메시지를 보내고(publish), 받는(subscribe) 형태의 통신을
Pub/Sub이라고 하고, 카프카는 Pub/Sub을 기반으로 만들어진 메시징 시스템이다.
(이미지 출처: Apache Kafka 0.8.1 Documentation )
- 카프카는 확장성(scale-out)과 고가용성(high availability)을 위하여 broker들이 클러스터로 구성
되어 동작하도록 설계되어 있다. 심지어 broker가 1개 밖에 없을 때에도 클러스터로써 동작한
다. 클러스터 내의 broker에 대한 분산 처리는 아래의 그림과 같이Apache ZooKeeper가 담당한
다.
(이미지 출처:http://blog.mmlac.com/log-transport-with-apache-kafka )
- AMQP 프로토콜이나 JMS API를 사용하지 않고 단순한 메시지 헤더를 지닌 TCP기반의 프로토콜
을 사용하여 프로토콜에 의한 오버헤드를 감소시켰다.
- 메시지를 기본적으로 메모리에 저장하는 기존 메시징 시스템과는 달리 메시지를 파일 시스템에
저장한다.
- 기존의 메시징 시스템에서는 broker가 consumer에게 메시지를 push해 주는 방식인데 반해,
Kafka는 consumer가 broker로부터 직접 메시지를 가지고 가는 pull 방식으로 동작한다. 따라서
consumer는 자신의 처리능력만큼의 메시지만 broker로부터 가져오기 때문에 최적의 성능을 낼 수 있다.
4.출처
Uploaded by Notion2Tistory v1.1.0