본문 바로가기
IT KNOWLEDGE

오픈소스 잘 활용하기 - Apache Kafka (1)

by btc_홍민표 2022. 6. 9.

 

안녕하세요 임오군란과 민씨의 민입니다. 오늘은 오픈소스의 대표적인 이벤트 브로커인 Apache Kafka를 소개하기 전에 앞서 먼저 메시지 큐와 브로커를 소개하도록 하겠습니다.

 

메시지 큐란?
메시지 큐는 키보드나 마우스를 통해 발생하는 사용자의 입력을 메시지로 전달하는 윈도우즈 시스템에서 어떤 프로세스에 대한 메시지를 저장하기 위해 할당된 큐다.

출처: 위키백과
 
 

출처: Microsoft Azure 공식 Docs

쉽게 생각하면 프로세스끼리 데이터를 교환할 때 사용하는 통신방법이고 통신을 위해 큐라는 자료구조 형식을 사용한다고 볼 수 있습니다.

 

먼저 자료구조형 중 큐와 스택의 차이를 살펴보고 가겠습니다.

Queue VS Stack

 

1. Queue

선입선출

2. Stack

후입선출

메시지큐의 특징

  • 비동기(Asynchronous) - 순서와 상관없이 처리
  • 분리 또는 비동조(Decoupling) - 느슨한 연결
  • 탄력성(Resilience) - 일부가 전체에 영향을 미치지 않음
  • 과잉(Redundancy) - 실패시 재실행 가능
  • 보증(Guarantees) - 처리된 것을 확인할 수 있음
  • 확장성(Scalable) - 프로세스가 확장되어 큐에 메시지를 보낼 수 있음

 

용도

대용량 데이터를 처리하기 위한 batch작업 (실시간으로 데이터를 처리하는것이 아닌 일괄적으로 몰아서 처리하는 작업), 채팅서비스, 비동기 데이터를 처리할 때 적합

 

메시지브로커와 이벤트브로커의 차이

 

1. 메시지브로커

 

메시지브로커는 Publisher가 생산한 메시지를 메시지큐에 저장 후 Consumer가 메시지를 수신하도록 중간 역할을 하는 Broker의 역할을 합니다.

또한 이 때 발생한 메시지는 즉시 짧은 시간안에 삭제되어 없어집니다.

Pub/Sub구조의 서로 다른 프로세스에서 데이터를 비동기로 처리하기 위해 사용합니다.

대표적인 메시지 브로커로는 오픈소스인 Apache Active MQ 와 RabbitMQ, AWS의 SQS, Google Cloud의 Pubsub, Azure에는 Service Bus가 있습니다.

 

2. 이벤트브로커

먼저 이벤트브로커는 메시지브로커 역할을 수행할 수는 있지만 메시지브로커의 역할을 수행하지 못한다는 점이 가장 큰 차이라고 볼 수 있겠습니다.

 

이벤트 또는 메시지라고도 불리는 레코드를 보관하여 인덱스를 통해 개별 액세스를 관리합니다

 

또한 메시지브로커는 메시지를 바로 삭제하는데 반해 이벤트브로커는 Publisher가 만든 이벤트를 Event broker Queue에 저장합니다. 

이러한 저장된 이벤트를 통해 대용량 데이터를 효과적으로 처리할 수 있고, 만약 장애가 발생할 경우 일어난 지점을 복구할 수 있습니다.

이러한 이벤트브로커는 MSA에서 중요한 역할을 할 수 있다고 할 수 있겠습니다.

 

대표적인 이벤트 브로커로는 Apache의 카프카 AWS 키네시스가 있습니다.

 

AMQP(Advanced Message Queueing Protocol)

메시지큐에는 따로 표준이 없었기에 프로토콜을 통해 표준을 정의하기 위해 만든 메시지 큐 프로토콜입니다.

 

 

발행-구독 모델 (Pub/Sub Model)

IoT에서의 Pub/Sub 구조

 

 

토픽

Publish(발행) 그리고 Subscribe(구독) 형태를 띄는 모델입니다.

즉 보내는 이 받는이 그리고 중계해주는 브로커(Kafka, RabbitMQ 등)가 존재함으로써 비동기, 즉 순서와 상관없이 먼저 프로세스가 끝나는대로 처리합니다.

마치 우리가 물건을 주문할 때 (Publisher) 택배사를 통해(Brocker or Channel) 각 허브로(Topic) 택배기사가 주문한 물품을(Message) 각 주소지(Subscriber)에 누가 먼저 주문했는지와는 관계없이 배송해주는 것과 같습니다.

 

이 때 발행자는 수신자가 누군지와는 관계 없이 메시지를 전송합니다.

 

이를 비동기라고 합니다. 반면에 동기는 주문한 순서에 따라 순차적으로 물건이 배송될때까지 다음 순서가 물건을 기다려야하므로 물건은 늦게 배송될 수 밖에 없습니다.

 

장점으로는 Publisher와 Subscriber의 느슨한 연결(Lossly Coupled)로 인해 서로 직접적인 연결이 없어 아키텍쳐를 구성하기 용이해졌고 확장성이 용이해졌다는 장점이 있습니다.

 

단점으로는 목적지가 확실해야만 하는 구조에서는 수신지가 명확하지 않기 때문에 의도하지 않은 곳으로 트래픽이 흐를 수 있기 때문에 적합하지 않다는 단점이 있습니다.

 

 

 

오늘은 여기까지 아파치 카프카를 소개하기 전 메시지 브로커와 이벤트 브로커 그리고 그 특징들을 알아보았습니다.

다음시간에는 오픈소스인 아파치 카프카를 본격적으로 소개해보도록 하겠습니다. 이상으로 임오군란과 민씨에서 민입니다.

 

감사합니다.

댓글