Apache Kafka

Kafka

  • 이벤트 스트리밍 플랫폼, 메시지 브로커
  • 링크드인에서 개발 → 오픈소스화
  • 개발 언어는 스칼라
  • 애플, 넷플릭스, 카카오 등 많은 기업에서 사용 중

이벤트 스트리밍 플랫폼

실시간으로 발생하는 데이터를 저장, 처리, 다양한 시스템으로 전달하는 데이터 파이프라인의 핵심 인프라

  • 이벤트 소스(데이터베이스, 센서, APP 등)에서 실시간으로 데이터를 이벤트 스트림 형태로 수집
  • 이벤트 스트림을 나중에 검색할 수 있도록 영구적으로 저장
  • 이벤트 스트림을 실시간 및 소급적으로 조작, 처리 및 대응
  • 필요시 다양한 목적지 기술로 라우팅

메세지 큐

  • 프로그램(프로세스) 간 데이터 교환에 사용되는 기술의 하나.
  • 비동기, 낮은 결합도, 확장성, 탄력성, 보장성을 제공.

활용처

  • 금융 : 증권 거래소, 은행, 보험 등에서 실시간으로 결제 및 금융 거래를 처리
  • 물류 및 자동차 산업 : 자동차, 트럭, 차량대, 배송물을 실시간으로 추적하고 모니터링
  • 공장 등 : IoT 장치나 기타 장비에서 센서 데이터를 지속적으로 수집하고 분석
  • 소매, 여행 업계, 모바일 앱 : 고객 상호작용과 주문을 수집하고 즉시 대응
  • 의료 : 치료를 받는 환자를 모니터링, 상태 변화를 예측, 적시에 치료를 보장
  • 업무 : 다양한 부서에서 생산되는 데이터를 연결, 저장하고, 이용 가능하게 만듦
  • 데이터 플랫폼, 이벤트 기반 아키텍처, 마이크로서비스의 기반 역할

구조와 핵심 구성 요소

구성 요소 설명
Producer - 데이터를 생성하고 Kafka 클러스터로 전송하는 시스템 또는 애플리케이션.
- 이벤트나 로그 등의 메시지를 보냄
Kafka Cluster - Kafka 브로커들의 집합.
- 데이터를 수신, 저장, 분산 처리하는 핵심 인프라.
- Topic과 Partition을 관리
Topic - 메시지를 구분하는 단위.
- 특정 주제에 해당하는 메시지 스트림을 분리하여 저장하고 구독할 수 있음
Consumer - Kafka로부터 메시지를 읽어가는 애플리케이션 또는 서비스.
- 필요에 따라 특정 Topic 또는 Partition을 구독함


Wanted - Backend Pre-onboarding - CQRS (하규태)

구성 요소 설명
Partitioner - Producer가 전송한 메시지를 어떤 Partition에 보낼지 결정하는 로직/모듈.
- 기본적으로 라운드로빈 방식이나 키 기반 해시 분배 등을 사용
Partition - Topic을 물리적으로 나눈 단위.
- 메시지는 파티션에 순차적으로 저장되며, 병렬 처리와 확장을 가능하게 함
Message - Kafka를 통해 전달되는 데이터 단위.
- 일반적으로 key, value, timestamp 등의 메타데이터를 포함함
Offset - 각 Partition 내 메시지의 고유 위치를 나타내는 숫자.
- Consumer는 이 offset을 기준으로 어떤 메시지를 읽었는지 추적 가능
Consumer Group - 여러 Consumer가 하나의 그룹으로 묶은 단위.
- 하나의 메시지를 중복 없이 처리하도록 하여 효율성 증대.

메시징 시스템 비교 (Kafka vs RabbitMQ)

항목 Kafka RabbitMQ
분류 이벤트 브로커 (Event Streaming Platform) 메시지 브로커 (Message Queue)
설계 목적 고성능 이벤트 스트리밍, 로그 수집, 데이터 파이프라인 신뢰성 있는 메시지 전달, 작업 큐 처리
메시지 저장 디스크에 영구 저장, 재처리 가능 기본적으로 읽으면 삭제
처리 방식 Pull 기반 (Consumer가 메시지를 당김) Push 기반 (Broker가 Consumer에게 메시지를 보냄)
사용 사례 실시간 분석, CDC, 로그 수집, 대규모 데이터 파이프라인 이메일 전송, 알림 시스템, 백그라운드 작업 큐 등

Reference

kafka - doc
Confluent Developer - apachekafka key concept image
호다닥 톺아보는 Kafka
Wanted - Backend Pre-onboarding - CQRS (하규태)
https://gruuuuu.github.io/integration/kafka-concept/
https://www.qlik.com/us/streaming-data/apache-kafka

Comments