본문 바로가기

IT Note/Data&AI

Kafka의 필요성: 분산 데이터 환경의 필수품

안녕하세요! 여립입니다!

다들 2024년을 마무리하며 한해를 돌아보고 계실 것 같습니다. 저의 경우 올해 목표였던 기술 스터디를 완주할 수 있었습니다.

마침 기술 스터디의 주제가 [실전 카프카 개발부터 운영까지]이기도 하고, 이전글인 데이터 매쉬에 이어 카프카를 소개하면 좋을 것 같아 간단한 정의부터 장단점, 그리고 사용 예시까지 정리해보았습니다. 

 


1. 카프카가 무엇인가요?

Apach Kafka Logo

카프카(Kafka)! 세계적인 소설가 프란츠 카프카(Franz Kafka)의 이름으로부터 유래한 Apach Kafka는 오픈소스 데이터 스트리밍 플랫폼으로 대용랑, 대규모 데이터(메세지)를 빠르게 처리하는 목적으로 개발된 플랫폼입니다. 비즈니스 중심의 소셜 네트워킹 플랫폼인 LinkedIn에서 하루에 1조 4천억 건의 메세지를 처리하기 위해 내부 시스템으로 개발했고, 2011년에 오픈소스로 공개해 현재는 많은 기업에서 사용하고 있습니다.한국에서 카프카를 활발하게 쓰는 기업으로는 카카오가 가장 대표적입니다 (수많은 메세지들 😶‍🌫️).

 

2. 왜 카프카를 사용할까요?

Kafka는 스트리밍, 즉 실시간 데이터를 처리하는 데 강점을 가진 플랫폼입니다. 다양한 소스에서 발생하는 데이터를 수집하여 한곳으로 모아 전달하거나, 다시 여러 소스로 데이터를 분배하는 등 데이터 파이프라인의 역할을 수행합니다. 이러한 특성 덕분에 Kafka는 기존의 중앙 집중형 데이터 시스템에서 다양한 도메인으로 데이터를 전달해야 하는 현대 환경에서, 데이터 매쉬(Data Mesh)를 구성하는 데 필수적인 도구로 자리 잡고 있습니다.

 

데이터 매쉬는 데이터를 중앙에서 관리하는 대신, 각 도메인이 데이터를 소유하고 처리하는 분산 데이터 아키텍처를 지향합니다. 이 과정에서 Kafka는 데이터 흐름을 조율하며, 서비스 간 데이터 의존성을 낮추고 확장성을 보장하는 핵심 역할을 합니다.

(⬇️아직 읽어보시지 않았다면, 데이터 매쉬에 대해 더 알아보세요!)

https://it-ist.tistory.com/350

 

데이터 매쉬: 중앙 집중형에서 분산형으로

안녕하세요, 여립입니다.이번 글에서는 데이터의 중요성이 부각되며 등장한 데이터 관리방식인 데이터 매쉬에 대해 다뤄볼까 합니다.** 이번 글은 [Data Mesh Architecture] 내용을 기반으로 작성했습

it-ist.tistory.com

 

더불어, 비동기 서비스를 구성하는 데 필수적인 도구이기도 합니다.

비동기란 동기의 반댓말로, 순차적으로 동작하는 동기 방식과는 다르게, 현재 동작이 끝날 때까지 기다리지 않고 다음 동작을 실행하는 병렬적인 작업 처리 방식을 의미합니다. 비동기 서비스를 구성할 때, 카프카를 사용해 여러 작업을 동시에 처리할 수 있어, 높은 처리량과 빠른 응답 속도가 필요한 시스템에서 유용합니다.

 

Kafka는 단순히 데이터를 저장하고 전달하는 도구를 넘어, 이벤트를 전달하는 플랫폼으로 정의할 수 있습니다. 여기서 말하는 이벤트란, 서비스에서 발생하는 모든 활동(데이터)을 의미합니다. 예를 들어, 전자상거래 시스템에서의 주문 완료 이벤트, 애플리케이션에서의 버튼 클릭 이벤트, 센서에서 발생하는 데이터 스트림 등이 포함됩니다.

 

이러한 이벤트 기반 구조를 통해 Kafka는 데이터를 주기적으로 대기하지 않고, 발생 즉시 처리할 수 있다는 강점이 있습니다. 독립적인 서비스 간 데이터를 효율적으로 전달할 수 있어, 서로 다른 시스템이나 서비스가 데이터를 주고받을 때, 비동기적으로 연결할 수 있도록 도와주는 중요한 역할을 담당합니다.

 

빅데이터 환경에서 분산 시스템을 구축하고 비동기 기반의 환경을 구축하기 위해서, 카프카는 필수불가결한 플랫폼이 되었습니다.

 

3. 카프카말고 다른 서비스가 있나요?

기본적으로 메세징 시스템은 메세지를 전달하는 방식과 목적에 따라 크게 메세지 큐 (Message Queue)와 Pub/Sub (Publish-Subscribe)으로 나누어집니다.

 

메세지 큐 (Message Queue)

이미지 출처: https://aws.amazon.com/ko/message-queue/

메세지 큐는 큐 자료구조를 사용해 메세지를 만들어내는 생산자가 큐(대기열)에 메세지를 넣으면, 메시지를 소비하는 소비자가 하나씩 읽어 가는 방식입니다. 기본적으로 점대점 통신 (Point-to-Point)을 사용해, 하나의 생산자와 하나의 소비자 사이에 메세지가 전달되는 것을 의미합니다. 그렇기에 여러 사용자가 한 메세지에 접근하기에는 어려운 구조이지만, 메세지를 항상 순서대로 처리할 수 있다는 강점이 있습니다.

 

Pub/Sub (Publish-Subscribe)

이미지 출처: https://aws.amazon.com/ko/what-is/pub-sub-messaging/

Pub/Sub은 구독자(=소비자)가 특정 토픽을 구독하고, 토픽에 메세지가 발행되었을 때 메세지가 구독자들에게 전달되는 방식입니다. 발행자가 메세지를 게시하면, 그 메세지는 토픽을 구독하는 모든 구독자에게 전달되므로 일대 다의 형태를 띄고 있습니다. 특정 메세지가 게시될 때 기준이기에, 실시간 데이터 전송과 이벤트 기반의 데이터 시스템에 적합합니다.


Kafka vs RabbitMQ vs Redis

카프카와 가장 많이 비교되는 서비스들로 RabbitMQ와 Redis가 있습니다. 

RabbitMQ는 메시지 큐에 초점이 맞춰져 있으며, 작업 대기열로써 주로 사용됩니다. Redis는 기본적으로 키 값 저장소 이지만 Pub/Sub 기능을 제공해 간단한 메세징 시스템으로 활용이 가능합니다.

Kafka는 메시지 큐와 Pub/Sub 모델을 모두 지원해, 가장 범용적으로 사용됩니다.

 

간단하게 정리하면 아래 표와 같습니다:

특성 Kafka RabbitMQ Redis
모델 Pub/Sub + 메시지 큐 메시지 큐 Pub/Sub
주요 목적 실시간 대용량 데이터 스트리밍 작업 큐(Task Queue) 빠른 데이터 캐싱 및 간단한 메시지 전달
확장성 고도로 확장 가능 제한적 제한적
처리 속도 대규모 데이터 처리에 최적화 중소 규모의 메시지 처리에 적합 메모리 기반으로 빠르지만 데이터 손실 위험
사용 사례 데이터 스트리밍, 이벤트 기반 처리 작업 분산, 비동기 작업 처리 캐싱, 간단한 Pub/Sub 메시징

 

4. 카프카 사용사례

카프카는 다양한 방식으로 사용될 수 있습니다.

주로 사용되는 방식으로는,

  • 실시간 로그 분석.
  • 실시간 추천 시스템 및 머신 러닝 모델 연동.
  • 시스템 상태 모니터링과 이상 감지.
  • 데이터 변경 사항 캡처를 통한 동기화 및 분석.
  • 안전한 시스템 마이그레이션 (데이터베이스 변경 및 데이터 이동 등).

등이 있습니다.

 


이 글에서는 Kafka의 정의부터 필요성, 구조, 단점, 그리고 주요 활용 사례까지 살펴보았습니다. 카프카의 목적과 필요성을 이해하는 데 도움이 되었길 바라며, 이만 글을 마치겠습니다.

 

읽어주셔서 감사합니다, 좋은 하루 되세요!

반응형