논문 리뷰에 들어가기 앞서 논문에서 핵심으로 사용하고 있는 Apach Kafka에 대한 간단한 설명
Apache Kafka란?
Apache Kafka는 실시간 데이터 스트리밍 플랫폼이다. 쉽게 말해, 대량의 데이터를 실시간으로 안정적으로 주고받을 수 있게 해주는 메시징 시스템이라고 생각하면 된다. 기존의 배치 방식은 데이터를 모아서 한번에 처리했다면 Kafka는 데이터가 발생할 때마다 처리한다는 차이점이 있다. 데이터의 시작과 끝을 지정하지 않고 ms단위의 지연 시간으로 데이터를 순차적으로 처리하는 것이다.
Kafka의 핵심 개념
Producer: 데이터를 생성하여 Kafka로 보내는 역할을 한다. 예를 들어, 웹사이트의 사용자 활동, IoT 센서 데이터, 로그 파일 등이 producer가 될 수 있다.
Consumer: Kafka에서 데이터를 가져가서 처리하는 역할을 한다. 데이터 분석 시스템, 모니터링 도구, 데이터베이스 등이 consumer가 될 수 있다.
Topic: 데이터가 저장되는 카테고리이다. 데이터의 종류나 목적에 따라 다른 topic을 사용한다. 마치 폴더처럼 데이터를 구분해 놓는 개념이다.
Partition: 하나의 topic은 여러 파티션으로 나뉘어 병렬 처리가 가능하다. 이는 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를 활용하여 실시간 스트림 처리와 관련된 아래의 문제들을 해결하고자 한다.
❗️주요 문제점
확장성 (Scalability) 기존 시스템은 연속적인 데이터 스트림의 높은 처리량(throughput) 및 낮은 지연시간(latency) 요구를 감당하지 못할 수 있다.
내결함성 (Fault Tolerance) 스트림 처리 파이프라인은 장애 발생 시에도 복구 가능해야 하며, 처리 중 데이터 유실 없이 보존할 수 있어야 한다.
유연성 (Flexibility) 기업들은 사기 탐지, 실시간 분석, 개인화 추천 등 다양한 스트림 처리 요구사항을 가집니다. 하지만 기존 솔루션은 이를 만족시킬 수 있는 설계 패턴이 부족할 수 있다.
성능 평가 (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시장으로 뛰어든 것이 아닐까 생각이 든다. 사용자의 결제 정보와 토스 포스기를 이용하는 가맹점의 수입 및 정보를 바탕으로 또 다른 서비스를 기획하는 것이 아닐까 생각이 든다.