MQ ( 정의와 메세지브로커)

문해피와 제육볶음·2023년 9월 10일
0

Kafka

목록 보기
1/4

카프카를 공부하면서 메세지큐의 정의를 공부하다가 메세지브로커와 이벤트브로커로 나뉜다는것을 알았습니다.
그러면서 프로젝트를 진행하면서 어떤 메세지큐를 써야할지 고민하면서 공부했던 내용을 작성합니다.

🦧 메세지 큐

RabbitMQ, Redis, Kafka 같은 기술을 메시지 플랫폼이라고 한다.

메시지 플랫폼은 2가지 종류로 나뉘어진다.

  1. 메시지 브로커
  2. 이벤트 브로커

Kafka와 RabbitMQ는 모두 메세지 큐 안에서 정의가 됩니다.

메세지 큐

메시지 큐는 메시지 기반의 통신 프로토콜에서 사용되는 방식으로, 프로세스나 스레드 간에 메시지를 교환하는데 사용됩니다. 이러한 메시지 큐는 비동기적인 통신을 가능하게 하며, 시스템 간의 결합도를 낮추고 확장성을 높이는데 도움이 됩니다.

구성

  • 프로듀서 : 메세지를 생성하고 보내는 역할을 합니다.
  • 큐 : 메세지를 저장하는 저장소의 개념으로 대기하는 공간입니다. 일반적으로 FIFO으로 처리됩니다.
  • 컨슈머 : 큐에서 메세지를 가져와 소비하는 역할을 합니다.

작동 패턴

1️⃣ Point-to-Point (P2P)

  • 각 메시지가 하나의 컨슈머에게 전달됩니다.
  • 만약 여러 컨슈머가 있으면, 그들 중 하나만 해당 메시지를 받게 됩니다.
  • JMS (Java Message Service) API에서 지원하는 Queue가 이 패턴에 해당합니다.

2️⃣Publish/Subscribe (Pub/Sub)

  • 발행된 모든 메시징이 모든 구독자에게 전달됩니다.
  • 한 번 발행된 메세징은 여러 컨슈머에게 동일하게 전달될 수 있습니다.
  • JMS API에서 지원하는 Topic이 이 패턴에 해당합니다.

장점

  1. 비동기 처리: 비동기적으로 데이터를 전달할 수 있습니다. 이는 서비스가 다른 서비스의 처리를 기다리지 않아도 됩니다.
  2. 분산처리 : 메시지 큐는 여러 컨슈머가 동일한 큐에서 작업을 가져와 동시에 처리할 수 있도록 지원합니다.
  3. 탄력성: 메시지 큐는 프로듀서와 컨슈머 사이의 중간 계층 역할을 하므로, 한쪽이 실패해도 전체 시스템에 영향을 미치는 것을 최소화합니다.
  4. 메세징 보증: "At least once" 또는 "Exactly once" 같은 메세징 전달 보증 방식을 제공하면서 메세징이 정확하게 전달되거나 소실되거나 중복될 가능성 없이 안전하게 처리됩니다.
  5. 순서 보장: 일부 메세징 시스템(예: Apache Kafka)은 특정 조건 하에서 메세징 순서를 보장하는 기능을 제공합니다.
  6. 디커플링 (Decoupling): 프로듀서와 컨슈머 사이에 의존성 없이 개발 및 운영 가능함으로써 유연한 아키텍처 설계가 가능합니다.
  7. 백로그 관리: 만약 소비자가 일정량 이상의 데이터 처리에 문제가 생겼다면, 해당 데이터들은 자동으로 Queue 내부에 저장되어 나중에 다시 처리될 수 있습니다.

🦧 메세지브로커

  • 메시지를 받아서 처리하면 메세지가 삭제됩니다.
  • 손실되면 안되는 요청을 처리할 때에는 주의해야합니다.

대표적인 메세지 브로커는 RabbitMQ가 있습니다.

RabbitMQ

  • RabbitMQAMQP 프로토콜을 구현한 메시지 브로커이다
  • 구성이 쉽고 안정적입니다.
  • 프로젝트의 규모가 작고 확장의 계획이 없다면 RabbitMQ가 적당하다.
  • AMQP 프로토콜
    Client와 Middleware broker간의 메시지를 주고받기 위한 프로토콜

🦦 구성

  • 생산자(Producer) : 요청을 보내는 역할을 합니다
  • 소비자(Consumer) : Producer로부터 메세지를 받아 처리하는 역할을 합니다
  • exchange : 메세지를 전달하고자 하는 목적지(큐)에 전달하는 역할을 합니다
  • 큐(queue) : 메세지를 쌓는 역할을 합니다

카프카와 다른점은 바로 queue로 들어가기 전, exchange라는 하나의 단계를 더 거친다는 것입니다.
RabbitMQ에서 메시지는 곧바로 queue에 들어가지 않고 exchage에게 전달하면 exchange가 queue에 메시지를 넣는 역할을 수행한다.

🦦 RabbitMQ는 AMQP를 구현합니다.

AMQP(Advanced Message Queuing Protocol, 어드밴스트 메시지 큐잉 프로토콜)는 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜입니다.

🦦 차별점

  1. Broker 중심적인 형태로 publisher와 consumer간의 보장되는 메시지 전달에 초점
  2. 클러스터 구성이 쉽고 Manage UI가 제공되며 플러그인도 제공되어 확장성 뛰어남
  3. 데이터 처리보단, 관리적 측면이나 다양한 기능 구현을 위한 서비스를 구축할 때 사용

🦧 이벤트브로커

  • 메시지 브로커와 다르게 이벤트가 삭제되지 않는다는 특징이 있다.
  • 서비스에서 발생하는 이벤트를 DB에 저장하듯이 이벤트 브로커의 큐에 저장한다.

대표적인 이벤트브로커로 Kafka가 있습니다.

Kafka

  • 오픈 소스 프로젝트로 운영되고 있는 분산 이벤트 스트리밍 플랫폼입니다.
  • 이벤트 브로커의 역할을 수행하며, 대용량 데이터를 실시간으로 신뢰성 있게 처리하도록 설계되었습니다.
  • 대부분 3개 이상의 브로커로 클러스터를 구축하며 주키퍼와 함께 구축한다.
  • 서비스의 규모가 크고 규모를 확장할 계획이 있다면 Kafka가 적합하다.

위의 특징들 때문에 로그 수집, 실시간 분석, 스트림 처리 등 다양한 분야에서 활용되며, 복잡한 분산 시스템에서도 고성능과 확장성을 유지할 수 있습니다.

🦦 구성

  • Producer: 데이터를 생성하여 브로커에 데이터를 적재합니다.
  • Consumer: 브로커에서 데이터를 가져와 소비합니다.
  • Broker: Kafka 시스템에서 서버를 말하고, 메시지(또는 이벤트)를 저장하고 전달합니다.
  • Topic: 메시지가 저장되는 카테고리 또는 버킷입니다. 각 토픽은 하나 이상의 파티션으로 나뉘어집니다.
  • Partition: 토픽을 나누는 하위 단위로, 각 파티션 내에서 메시지 순서가 보장됩니다.

0개의 댓글