상세 컨텐츠

본문 제목

DE Study || Apache KAFKA를 이용한 실시간 데이터처리 방식...

카테고리 없음

by HAKIIM 2025. 4. 9. 17:33

본문

 

Apach_Kafka

논문 링크

 

Apach Kafka

논문 리뷰에 들어가기 앞서 논문에서 핵심으로 사용하고 있는 Apach Kafka에 대한 간단한 설명

 

Apache Kafka란?

Apache Kafka는 실시간 데이터 스트리밍 플랫폼이다. 쉽게 말해, 대량의 데이터를 실시간으로 안정적으로 주고받을 수 있게 해주는 메시징 시스템이라고 생각하면 된다. 기존의 배치 방식은 데이터를 모아서 한번에 처리했다면 Kafka는 데이터가 발생할 때마다 처리한다는 차이점이 있다. 데이터의 시작과 끝을 지정하지 않고 ms단위의 지연 시간으로 데이터를 순차적으로 처리하는 것이다.

 

Kafka의 핵심 개념

  1. Producer: 데이터를 생성하여 Kafka로 보내는 역할을 한다. 예를 들어, 웹사이트의 사용자 활동, IoT 센서 데이터, 로그 파일 등이 producer가 될 수 있다.
  2. Consumer: Kafka에서 데이터를 가져가서 처리하는 역할을 한다. 데이터 분석 시스템, 모니터링 도구, 데이터베이스 등이 consumer가 될 수 있다.
  3. Topic: 데이터가 저장되는 카테고리이다. 데이터의 종류나 목적에 따라 다른 topic을 사용한다. 마치 폴더처럼 데이터를 구분해 놓는 개념이다.
  4. Partition: 하나의 topic은 여러 파티션으로 나뉘어 병렬 처리가 가능하다. 이는 Kafka의 확장성과 성능의 핵심이다.
  5. Broker: Kafka 서버를 의미한다. 여러 브로커가 클러스터를 이루어 동작한다.

*컴포넌트 설명

더보기
  1. Kafka 클러스터: 여러 브로커로 구성된 Kafka 서버 집합.
    • 브로커: 각 Kafka 서버 인스턴스입니다. 확장성과 내결함성을 위해 여러 개가 함께 작동.
    • Topic과 파티션: 메시지가 저장되는 논리적 채널로, 각 토픽은 여러 파티션으로 나뉘어 병렬 처리.
  2. ZooKeeper: Kafka 클러스터의 메타데이터를 관리하고, 브로커의 상태를 모니터링. (최신 버전에서는 KRaft 모드로 ZooKeeper 없이도 운영 가능)
  3. Producer: 데이터를 생성하여 Kafka 토픽으로 보내는 애플리케이션.
  4. Consumer Group: 토픽의 데이터를 소비하는 애플리케이션 그룹.
    • 각 Consumer는 특정 파티션의 데이터를 담당하여 병렬로 처리.

이러한 구조를 통해 Kafka는 대량의 데이터를 실시간으로 안정적이게 처리할 수 있으며, 확장성과 내구성을 갖춘 시스템으로 작동합니다.

Kafka의 특징과 장점

  1. 고성능: 초당 수백만 개의 메시지를 처리할 수 있는 성능을 가지고 있다.
  2. 확장성: 브로커를 추가하여 쉽게 확장할 수 있다.
  3. 내구성: 데이터는 디스크에 저장되며, 복제를 통해 안전하게 보관된다.
  4. 장애 허용성: 일부 서버가 다운되어도 시스템이 계속 작동한다.
  5. 데이터 보존: 처리된 데이터도 설정한 기간 동안 보존할 수 있다.

Kafka의 일반적인 사용 사례

  1. 로그 수집: 여러 서버의 로그를 중앙 집중적으로 수집하고 처리한다.
  2. 실시간 분석: 사용자 활동이나 시스템 동작을 실시간으로 분석한다.
  3. 이벤트 처리: 이벤트 기반 아키텍처에서 서비스 간 통신을 담당한다.
  4. 스트리밍 처리: 실시간으로 데이터를 변환하거나 집계한다.

 

Kafka 라이브러리

1. Kafka Producer API

더보기

핵심 개념:

  • 애플리케이션이 Kafka 토픽에 데이터를 발행(publish)할 수 있게 해주는 API
  • 비동기 전송, 배치 처리를 통한 성능 최적화 기능 제공
  • 메시지 전송 확인 수준(acks) 설정으로 신뢰성 조정 가능
  • 파티셔닝 전략 커스터마이징으로 메시지 분배 방식 제어

특징

  • send() 메서드를 통한 비동기 메시지 전송
  • 압축 옵션을 통한 네트워크 대역폭 최적화
  • 재시도 메커니즘으로 일시적 장애 대응
  • 키(key) 기반 파티셔닝으로 관련 메시지 그룹화

활용 사례

  • 네이버 쇼핑: 사용자 클릭 스트림 데이터 수집 시스템
  • 토스: 금융 트랜잭션 데이터 전송
  • 배달의민족: 주문 데이터를 레스토랑 및 배달 시스템에 전달
  • 현대카드: 신용카드 승인 데이터 실시간 처리

2. Kafka Consumer API

더보기

핵심 개념

  • 애플리케이션이 Kafka 토픽을 구독(subscribe)하고 데이터를 소비(consume)할 수 있게 해주는 API
  • Consumer Group을 통한 병렬 처리 지원
  • 오프셋(offset) 관리로 정확히 한 번 처리 보장
  • 자동 또는 수동 커밋 모드 제공

특징

  • poll() 메서드로 메시지 배치 가져오기
  • 리밸런싱(rebalancing)을 통한 Consumer 장애 대응
  • 특정 파티션 직접 할당 가능
  • 역직렬화기(deserializer) 설정으로 다양한 데이터 형식 지원

활용 사례

  • 카카오: 메시지 및 알림 처리 시스템
  • SK 텔레콤: 네트워크 텔레메트리 데이터 분석
  • 삼성 SDS: IoT 센서 데이터 모니터링
  • 쿠팡: 실시간 재고 관리 및 추천 시스템

3. Kafka Streams API

더보기

핵심 개념:

  • Kafka 내에서 스트림 처리를 위한 클라이언트 라이브러리
  • 상태 기반 처리, 변환, 집계, 조인 등 복잡한 스트리밍 연산 지원
  • Exactly-once 의미 체계 제공
  • 스트림과 테이블의 이중성(duality) 개념 활용

주요 특징:

  • 선언적 DSL(Domain Specific Language)과 함수형 프로그래밍 스타일
  • 로컬 상태 저장소로 빠른 데이터 접근
  • 내장된 윈도우 연산(windowing operations)
  • 경량 라이브러리로 별도 클러스터 불필요

활용 사례:

  • 신한은행: 실시간 사기 탐지 시스템
  • 야놀자: 실시간 가격 및 할인 분석
  • 당근마켓: 지역별 인기 상품 집계
  • 라인: 메시지 필터링 및 콘텐츠 분석

4. Kafka Connect API

더보기

핵심 개념

  • 외부 시스템과 Kafka 간의 데이터 통합을 위한 프레임워크
  • Source Connector(외부→Kafka)와 Sink Connector(Kafka→외부) 제공
  • 확장 가능하고 내결함성 있는 데이터 파이프라인 구축 가능
  • 분산 모드와 독립 실행 모드 지원

특징

  • 미리 구축된 커넥터 에코시스템 활용 가능
  • 오프셋 관리 자동화
  • REST API를 통한 동적 구성
  • 변환기(transformers)를 통한 데이터 변환 지원

활용 사례

  • 네이버 클라우드: 데이터베이스 변경 데이터 캡처(CDC)
  • 우아한형제들: 레거시 시스템과 현대적 마이크로서비스 연동
  • LG CNS: 기업 데이터 웨어하우스 통합
  • 롯데정보통신: IoT 플랫폼 데이터 수집 및 저장

 

그 외 Kafka 관련 라이브러리

  • 카프카 어드민(Kafka Admin) 클라이언트: 토픽 생성, 삭제, 설정 변경 등 관리 작업 자동화
  • KSQL(현재 ksqlDB): SQL 문법으로 스트림 처리를 가능하게 하는 인터페이스
  • Schema Registry: Avro, Protobuf 등의 스키마 관리 및 호환성 검증
  • MirrorMaker: 여러 Kafka 클러스터 간 데이터 복제 도구

 


 

 

Abstract

데이터의 양과 속도가 점점 증가함에 따라 다양한 어플리케이션에서 실시간 처리 솔루션이 필수적이 되었다.

Apache Kafka는 견고하고 확장 가능한 실시간 데이터 파이프라인을 구축하는 데 널리 사용되는 분산처리 스트리밍 플랫폼이다.

본 논문은 Apach Kafka를 활용한 실시간 스트림 처리의 세계를 탐구한다.

Kafka 기반 아키텍처 내에서 효율적인 메시지 처리와 데이터 변환을 가능하게 하는 설계 패턴들을 다루며,

Kafka의 실시간 데이터 처리의 다양한 산업 분야 적용 사례 또한 소개한다.

또한, Kafka 애플리케이션의 성능 평가 기술도 조사하여, 개발자들이 시스템의 효율성과 신뢰성을 최적화할 수 있도록 돕는다.

 

Instroduction

오늘날의 데이터 중심 사회에서, 조식들은 끊임없이 정보의 홍수에 시달리고 있다.

기존의 배치처리 기술은 이 실시간 데이터 유입속도를 따라가지 못하여, 통찰 도출과 신속한 의사 결정을 방해한다.

실시간 스트림 처리는 이러한 문제를 해결하는 핵심 솔루션으로 부상하고 있으며,

데이터가 발생하는 즉시 이를 준석하고 처리할 수 있게 한다.

이를 통해 즉각적인 이벤트 대응, 선제적 의사결정 그리고 지속적인 데이터 흐름으로부터의 통찰 도출도 가능하다.

Apache Kafka는 이러한 실시간 스트림 처리 분야에서 핵심기술로 자리매김하고 있다.

이 분산 처리 스트리밍 플랫폼은 높은 처리량, 내결함성, 확장 가능한 데이터 파이프라인 구축을 가능하게 하며,

개발자들이 데이터를 실시간으로 수집, 저장, 처리할 수 있도록 지원한다.

 

이 논문은 Kafka를 활용한 실시간 스트림 처리에 대해 다음과 같은 핵심 주제를 다루고자 한다.

  • 설계 패턴 ( Design Patterns ) : 토픽, 프로듀서, 컨슈며, 메시지 변환 등 Kafka 애플리케이션의 효율적이고 유지보수 가능한 설계를 위한 패턴
  • 사용 사례 : 다양한 산업에서 Kafka가 사기 탐지, 로그 집계, 센서 데이터 분석 등에서 어떻게 활용되는지
  • 성능 평가 : 병목현상 파악 및 시스템 효율성-확장성을 위한 Kafka 애플리케이션의 성능 평가 기법

 

 

Summary

Apache Kafka를 활용한 실시간 스트림 처리에 관한 기존 문헌은 Kafka의 아키텍처, 설계 패턴, 사용 사례, 그리고 성능 평가 방법론에 대한 포괄적인 이해를 제공합니다.

Narkhede, Shapira, Palino의 『Kafka: The Definitive Guide』는 Kafka의 실시간 데이터 처리 능력과 실무 적용 사례를 이해하는 데 중요한 기초 자료로 기능합니다.

Kreps, Narkhede, Rao가 작성한 초기 논문은 Kafka를 로그 처리 작업에 특화된 분산 메시징 시스템으로 소개하며, Kafka의 아키텍처, 핵심 구성요소, 설계 배경 등을 설명합니다. 이는 이후 실시간 스트림 처리 분야의 연구 기반을 마련하는 데 중요한 역할을 했습니다.

Shapira의 저작은 빅데이터 분석 시대에 실시간 데이터 처리의 중요성을 강조하며, Apache Kafka와 같은 기술이 스트리밍 데이터를 통해 실시간 인사이트를 얻고 의사결정을 내리는 데 어떤 기여를 하는지 조명합니다.

Taylor의 『Apache Kafka for Beginners』는 비록 실시간 스트림 처리에 특화된 내용은 아니지만, Kafka의 아키텍처 및 기능에 대한 기초적인 이해를 돕는 데 유용한 입문서입니다.

또한, Garg, Kumar, Singh의 리뷰 논문은 Kafka를 포함한 실시간 스트림 처리 시스템의 성능 평가 방법론을 다루며, 성능 지표, 벤치마킹 기법, 관련 과제들에 대한 포괄적인 논의를 제공합니다. 이를 통해 실제 환경에서 Kafka의 성능을 평가하고 이해하는 데 필요한 통찰을 제공합니다.

이러한 자료들을 종합하면, Apache Kafka의 중요성, 기능, 성능 고려사항을 중심으로 실시간 스트림 처리 환경에서의 역할에 대한 전체적인 시각을 확보할 수 있습니다.

 

Problem Definition & Objective

 

지속적으로 증가하는 스트림 데이터의 양과 속도는 기존의 배치 처리(batch processing) 방식으로는 대응하기 어려운 상황.

오늘날 기업들은 다음과 같은 기술을 필요로 하고 있다.

  • 실시간 인사이트 확보
  • 즉각적인 이벤트 대응
  • 사용자 경험의 개인화

이를 위해선 기존 시스템보다 더 빠르고 유연한 실시간 처리 체계가 필요하다.

이 프로젝트에서는 분산 스트리밍 플랫폼인 Apache Kafka를 활용하여 실시간 스트림 처리와 관련된 아래의 문제들을 해결하고자 한다.

 

 


❗️주요 문제점

  1. 확장성 (Scalability)
    기존 시스템은 연속적인 데이터 스트림의 높은 처리량(throughput)낮은 지연시간(latency) 요구를 감당하지 못할 수 있다.
  2. 내결함성 (Fault Tolerance)
    스트림 처리 파이프라인은 장애 발생 시에도 복구 가능해야 하며, 처리 중 데이터 유실 없이 보존할 수 있어야 한다.
  3. 유연성 (Flexibility)
    기업들은 사기 탐지, 실시간 분석, 개인화 추천 등 다양한 스트림 처리 요구사항을 가집니다. 하지만 기존 솔루션은 이를 만족시킬 수 있는 설계 패턴이 부족할 수 있다.
  4. 성능 평가 (Performance Evaluation)
    실시간 스트림 처리 파이프라인의 효율성과 효과성을 정량적으로 평가하는 것은 자원 할당 최적화와 기대 성과 달성을 위해 필수적이다

 

 

아래의 3가지 핵심 주제를 타 연구에서의 사례와 함께 연구 목적을 설명하고 있다.

1. 설계 패턴 (Design Patterns)

  • Kafka Streams API 기반의 스케일 가능한 파이프라인을 위한 설계 패턴을 식별 및 분석
  • 데이터 변환, 집계 등 대표적 패턴을 정의
  • 각 패턴의 장점과 단점, 적용 가능 시나리오 분석

예시: Lambda / Kappa / Microservices / Event Sourcing 등

 

2. 사용 사례 (Use Cases)

  • Kafka가 적용되는 실시간 처리 사례를 다양하게 탐색
  • 주요 분야
    • 금융: 사기 탐지
    • IoT: 센서 데이터 실시간 처리
    • 이커머스: 실시간 추천
    • 인프라: 로그 스트리밍 및 이상 탐지
  • 각 사례별 데이터 흐름, 처리 요구사항, 적합한 설계 패턴과의 매핑

 

3. 성능 평가 (Performance Evaluation)

  • Kafka 기반 시스템의 성능 측정 방법을 정의
  • 성능 측정 지표
    • 처리량 (Throughput)
    • 지연 시간 (Latency)
    • 확장성 (Scalability)
  • 다양한 설정 하에서 실험 수행 후 결과 분석
  • 다른 스트리밍 플랫폼(Flink, Spark 등)과 비교할 여지도 포함

 

 

🎥 YOLO + Kafka + PostgreSQL: 실시간 객체 인식 파이프라인 구현

논문에서는 Apache Kafka의 실시간 처리 능력을 실제 환경에 적용하기 위한 사례로, YOLO(You Only Look Once) 객체 인식 모델과 Kafka, PostgreSQL을 결합한 비디오 스트림 분석 시스템을 구현하였다.

 시스템 구성 개요

  • YOLO는 실시간 영상에서 사람 객체를 감지하여 감지 결과를 생성.
  • 이 감지 결과는 Kafka Producer를 통해 Kafka Topic으로 전송.
  • Kafka Consumer는 Topic의 메시지를 수신하여, PostgreSQL 데이터베이스에 저장.
  • 멀티스레딩(Threading) 기법을 통해 영상 처리와 메시지 소비를 병렬로 수행함으로써 실시간 처리를 유지.

 

 

 

Yolo를 이용한 실시간 객체 인지 데이터 파이프 라인 구현을 통해서 Apache Kafka의 빠른 메시지 전송 및 분산 처리 능력을 실시간 컴퓨터 비전 분야에 적용하여, Kafka가 단순 텍스트 스트림뿐 아니라 비정형 데이터(예: 영상, 이미지 인식 결과)에도 충분히 적용 가능하다는 확장 가능성을 보여줬다.

 

 

 

결론 (Conclusion)

Apache Kafka는 실시간 스트림 처리 분야에서 높은 처리량, 내결함성, 확장성을 바탕으로 다양한 산업에서 핵심 기술로 자리 잡았다.

본 논문에서는 Kafka의 실시간 데이터 처리 기능을 중심으로, 설계 패턴, 활용 사례, 성능 평가 방법론이라는 세 가지 축을 통해 Kafka의 구조적 유연성과 실용성을 비췄다.

핵심 

  • 설계 패턴 측면에서는 Lambda, Kappa, Microservices 구조를 비교하며 다양한 데이터 파이프라인 요구에 맞춘 유연한 설계를 가능성을 제시.
  • 사용 사례에서는 금융 사기 탐지, IoT 센서 분석, 로그 스트리밍 등 실제 현업에서 Kafka가 가시적인 성과를 내고 있는 다양한 시나리오를 제시.
  • 성능 평가에서는 처리량(Throughput), 지연 시간(Latency), 확장성(Scalability) 등 주요 지표에 기반해 Kafka 시스템을 정량적으로 측정하고 병목과 한계점을 파악하는 접근이 필요함을 강조.

이러한 분석을 통해 Apache Kafka는 단순한 메시징 시스템을 넘어 고성능 실시간 데이터 인프라의 중심 기술로 기능할 수 있음을 확인할 수 있었습니다.

 


그렇다면 현재 어떤 분야의 기업들이 Kafka의 기술들을 사용하고 있을까?

 

 

쏘카에서는 Kafka의 실시간 데이터 처리 기술을 이용하여 Topic에 현재 차량 GPS 데이터를 수집하여 사용자의 어플리케이션에 차량의 위치를 안내하고 IoT기술을 이용해 차량의 유지 및 보수 상태를 고지하는 서비스를 이용 중이다.

또한 당근 마켓은 사용자의 위치 기반으로 주변 중고거래 지역을 알리고 위치 기반으로 서비스를 제공하기 때문에 쏘카와 비슷한 방식을 사용하고 있다.

 

 

  토스 역시 Kafka의 데이터 스트림이 빠르고 결제 시스템에서의 이점을 바탕으로 결제처리와 사기 감지를 목적으로 이용하고 있다. 개인의 의견을 더 하자면 토스는 금융 부분 뿐만 아니라 맛집에 포스기를 하나씩 제공하는 결제시스템까지 섬렵하려고 하고 있다. 왜 그럴까? 금융사 즉 많은 은행들이 금융과 문화를 접목시키는 마케팅과 상품들을 많이 선보이고 있다. 이에 토스는 F&B시장으로 뛰어든 것이 아닐까 생각이 든다. 사용자의 결제 정보와 토스 포스기를 이용하는 가맹점의 수입 및 정보를 바탕으로 또 다른 서비스를 기획하는 것이 아닐까 생각이 든다.

 

 

 


 

참고 

https://www.redhat.com/ko/topics/integration/what-is-apache-kafka

 

Apache Kafka(아파치 카프카)란? 개념, 설치 방법과 구성 안내

Apache Kafka는 분산 데이터 스트리밍 플랫폼으로 실시간 데이터 처리, 분석, 저장을 지원하는 오픈소스 솔루션입니다. 아파치 카프카 개념, 설치 방법 등을 알아보세요

www.redhat.com

https://terrys-tech-log.tistory.com/39

 

[kafka] 카프카(kafka) 오픈소스 주요 개념정리

학습동기 예전부터 알고도 있었고, if kakao에서 아파치 플링크와 함께 로그 분석에 사용했다고하여, 간단히 producer, broker, consumer 구성으로 엇비슷하게 로그를 파싱하여 분산 프로세스별로 토픽을

terrys-tech-log.tistory.com