티스토리 뷰

최근에 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의 구성 요소 및 동작

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의 구성 요소 및 동작

 

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상에서 전달 상태를 확인하기 위한 메세지 표식을 사용
  • 데이터 처리보단 관리적 측면이나 다양한 기능 구현을 위한 서비스를 구축할 때 사용
댓글
댓글쓰기 폼