Network

RabbitMQ vs 카프카(Kafka)

블로그 주인장 2024. 1. 26.

RabbitMQKafka의 차이에 대해 알아보겠습니다.

메시지 큐(Message Queue)

RabbitMQ와 Kafka 를 이해하기 위해서는 우선적으로 메시지 큐에 대한 이해가 필요하다.

 

메시지 큐(Message Queue)

프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할 때 사용하는 통신방법이다.

더 큰 의미로는 메시지 지향 미들웨어(MOM)를 구현한 시스템을 의미한다.

 

PRODUCER : 정보를 제공하는 자

CONSUMER : 정보를 제공받아서 사용하려는 자

QUEUE : Producer의 데이터를 임시 저장 및 Consumer에 제공하는 곳

 

Message Queue에서 메시지는

End-Point 간에 직접적으로 통신하지 않고 중간에 Queue 를 통해 중개된다.

 

메시지 흐름 순서

1. 메시지를 전송한다.

2. producer는 해당 메시지를 queue에 추가한다.

3. 해당 메시지는 consumer가 메시지를 검색하고 이를 사용하기 위한 작업 전까지 임시 저장한다.

4. consumer에 의해 호출된다.

5. 해당 메시지는 queue에서 삭제된다.

 

Message Queue의 장점

1. 비동기 : queue라는 임시 저장소가 있기 때문에 나중에 처리가 가능하다.

2. 낮은 결합도 : 애플리케이션과 분리되어있다.

3. 확장성 : producer or consumer 서비스를 원하는 대로 확장할 수 있다.

4. 탄력성 : consumer 서비스가 다운되더라도 애플리케이션이 중단되는 것은 아니며 메시지는 지속하여

                  Message Queue에 남아있다.

5. 보장성 : Message Queue에 들어간다면 결국 모든 메시지가 consumer 서비스에 전달하는 것을 보장한다.

 


카프카(Kafka)

kafka는 LinkedIn에서 개발된 메시지큐 방식 기반, 분산 메시징 시스템이다.

 

Kafka의 pub-sub 모델 기반으로

publisher(=producer), subscriber(=consumer), kafka cluster로 구성된다.

 

Kafka 동작 원리

1. publisher는 전달하고자 하는 메시지를 topic을 통해 카테고리화한다.

2. subscriber는 원하는 topic을 구독(=subscribe)함으로써 메시지를 읽어온다.

3. publisher와 subscriber는 오로지 topic 정보만 알 뿐, 서로에 대해 알지 못한다.

4. kafka는 broker 들이 하나의 클러스터로 구성되어 동작하도록 설계가 되어있다.

5. 클러스터 내에 broker에 대한 분산처리는 ZooKeeper가 담당한다.

 

kafka에서 하나의 메시지는 topic으로 분류된다. 

그리고 하나의 topic은 다수개의 partition으로 나뉘어진다.

여러 개의 patition으로 분산시키는 이유는 병렬로 처리하기 위해 분산 저장한다.

 

Broker/zookeeper

- broker : kafka 서버를 의미한다.

- zookeeper : 분산 메시지 큐의 정보를 관리하는 역할로 필수적으로 필요한 요소이다.

 

kafka 차별점 

1. 메시지를 파일 시스템에 저장함으로써 영속성 보장 

2. subscriber(=consumer)가 broker로부터 직접 메시지를 가지고 가는 pull방식으로 동작 

3. publisher(=producer) 중심적인 형태로 많은 양의 데이터를 파티셔닝하는데 초점을 맞춘 시스템 

4. subscriber가 전달 상태를 기억한다. 

5. 방대한 양의 데이터를 처리할 때, 사용

 


RabbitMQ

RabbitMQ는 AMQP 프로토콜을 구현한 메시지 브로커이다.

 

여기서 말하는 AMQP 는 Client와 Middleware Broker 간의 메시지를 주고받기 위한 프로토콜이다.

 

  • producer : 메시지를 보내는 쪽 
  • consumer : 메시지를 받는 쪽 
  • exchange : publisher가 전달한 메시지를 queue에 전달하는 역할 
  • queue : 메시지를 저장하는 버퍼

여기서 차이점은, 바로 queue로 들어가기 전 exchange라는 하나의 단계를 더 거친다는 점이다.

RabbitMQ에서 곧바로 queue에 들어가지 않고 exchage에게 전달하면 exchange가 queue에 메시지를 넣는 역할을 한다.

 

RabbitMQ의 차별점

1. Broker 중심적인 형태로 publisher와 consumer간의 보장되는 메시지 전달에 초점

2. 클러스터 구성이 쉽고 Manage UI가 제공되며 플러그인도 제공되어 확장성 뛰어남

3. 데이터 처리보단, 관리적 측면이나 다양한 기능 구현을 위한 서비스를 구축할 때 사용

 


Kafka vs RabbitMQ

kafkaRabbitMQ의 차이에 대해 다시 한번 간단히 정리해보도록 하겠습니다.

 

1. Kafka는 pub/sub 방식 / RabbitMQ는 메시지 브로커 방식

- Kafkapub/sub 방식은 생산자 중심적인 설계로 구성, 생성자가 원하는 각 메시지를 게시할 수 있도록

  메시지 배포 패턴으로 진행한다.

- RabbitMQ메시지 브로커 방식은 브로커 중심적인 설계로 구성, 지정된 수신인에게 메시지를 확인,

  라우팅, 저장 및 배달하는 역할을 수행하며 보장되는 메시지 전달에 초점을 맞춘다.

 

2. 전달된 메시지의 대한 휘발성

- RabbitMQ는 queue에 저장되어 있던 메시지에 대해 Event Cosumer를 가져가게 되면

  queue에서 해당 메시지를 삭제한다.

- Kafka는 생성자로부터 메시지가 들어오면 해당 메시지를 topic으로 분류하고 이를 event streamer에 저장한다.

  그 후, 수신인이 특정 topic에 대한 메시지를 가져가더라도 event streamer는 해당 topic을 계속 유지하기 때문에

  특정 상황이 발생하더라도 재생이 가능하다.\

 

3. 용도의 차이

Kafka는 클러스터를 통해 병렬 처리가 주요 차별점인 만큼 방대한 양의 데이터를 처리할 때, 장점이 부각된다.

RabbitMQ는 데이터 처리보다는 Manager UI를 제공하는 만큼 관리적인 측면이나, 다양한 기능 구현을 위한 서비스를
  구축
할 때, 장점이 부각된다.

 

 

 

본 포스트는 작성자가 공부한 내용을 바탕으로 작성한 글입니다.
잘못된 내용이 있을 시 언제든 댓글로 피드백 부탁드리겠습니다.
항상 정확한 내용을 포스팅하도록 노력하겠습니다.

반응형

'Network' 카테고리의 다른 글

[Network] 도메인과 DNS  (0) 2024.04.28
HTTP와 WebSocket  (1) 2024.01.23

댓글