Offcanvas

모바일

'스트리밍 데이터' 플랫폼 선택법

2022.03.02 Martin Heller  |  InfoWorld
스트리밍 데이터는 보통 센서, 서버 로그와 같은 수많은 데이터 소스에 의해 지속적으로 생성된다. 스트리밍 데이터 레코드는 대체로 작아서 각각 몇 킬로바이트에 불과하지만 수가 많고 끊임없이 이어진다. 여기서는 스트리밍 데이터에 대한 기본 정보와 함께 스트리밍 데이터 플랫폼을 선택하는 방법을 알아본다. 
 
ⓒ Getty Images Bank
  
스트리밍 데이터 플랫폼은 어떤 식으로 움직이는가? 
흡수(Ingesttion) 및 데이터 내보내기(Export). 일반적으로 데이터 흡수와 데이터 내보내기는 모두 외부 시스템에 특화된 데이터 커넥터에 의해 처리된다. 경우에 따라서는 목적지에 맞게 데이터를 재정렬, 정제, 조절하기 위해 ETL(extract, transform, load 추출, 변환, 로드) 또는 ELT(extract, load, transform, 추출, 로드 및 변환) 프로세스가 사용되기도 한다. 

스트리밍 데이터 흡수에서는 보통 여러 소스, 경우에 따라 수천 개의 소스에 의해 생성되는 데이터를 읽어 들인다. 예를 들어 IoT 디바이스가 여기에 해당된다. 데이터 내보내기는 심층 분석과 머신러닝을 위해 데이터 웨어하우스 또는 데이터 레이크를 대상으로 하기도 한다. 

게시/구독과 주제. 아파치 카프카(Kafka), 아파치 펄사(Pulsar)를 포함한 많은 스트리밍 데이터 플랫폼은 데이터가 주제별로 구성되는 게시 및 구독 모델을 사용한다. 흡수된 데이터에는 하나 이상의 주제가 태깅되어 해당 주제를 구독하는 클라이언트가 데이터를 받을 수 있다. 온라인 뉴스 게시를 예로 들면, 정치인의 연설에 대한 기사라면 속보, 미국 뉴스, 정치 태그가 달릴 수 있고, 그러면 페이지 레이아웃 소프트웨어는 섹션 편집자(사람)의 감독 하에 각 해당 섹션에 이 기사를 포함한다. 

데이터 분석. 데이터 스트리밍 플랫폼에서 분석을 수행할 수 있는 기회는 일반적으로 파이프라인의 두 지점에 있다. 첫 번째 지점은 실시간 스트림 부분, 두 번째 지점은 영구적 엔드포인트다. 예를 들어 카프카의 스트림(Streams) API에는 간단한 실시간 분석 기능이 있고, 더 복잡한 실시간 계산에는 아파치 삼자(Samza) 또는 다른 분석 프로세서를 호출할 수도 있다. 데이터가 영구 데이터 저장소에 게시된 다음에는 분석과 머신러닝을 위한 부가적인 기회도 있다. 이 처리 작업은 근실시간 또는 주기적인 일괄 프로세스로 실행될 수 있다. 맞춤형 프로그램을 사용해 스트리밍 데이터 레코드를 분석하기 위해 AWS 람다와 같은 서버리스 함수를 데이터 스트림에 사용할 수 있다. 서버리스 함수는 아파치 플링크(Flink)와 같은 스트림 분석 프로세서의 대안이다. 

클러스터링. 개발 및 테스트 환경을 제외하고 데이터 스트리밍 플랫폼이 단일 인스턴스인 경우는 거의 없다. 프로덕션 스트리밍 플랫폼은 확장성이 필요하므로 일반적으로 노드 클러스터로 실행된다. 클라우드 이벤트 스트리밍에서 이를 구현하기 위한 최신 방법은 컨플루언트(Confluent) 클라우드와 같은 탄력적 서버리스 플랫폼을 사용하는 것이다. 

스트리밍 사용례 
오픈소스 카프카 문서에는 다음과 같은 사용례가 나와 있다. 
  • 주식 거래소, 은행, 보험사 등에서 결제 및 금융 거래의 실시간 처리 
  • 물류, 자동차 업계 등에서 자동차, 트럭, 수송품의 실시간 추적 및 모니터링 
  • 공장 및 풍력 발전소 등에서 IoT 디바이스로부터 지속적으로 센서 데이터를 캡처 및 분석 
  • 소매, 호텔 및 여행 업계와 모바일 애플리케이션 등에서 고객 상호작용 및 주문을 수집하고 즉각 대응 
  • 응급 상황에서의 적시 진료를 위한 병원 환자 모니터링 및 상태 변화 예측 
  • 회사의 다양한 부서에서 생산되는 데이터를 연결, 저장 및 제공 
  • 데이터 플랫폼, 이벤트 기반 아키텍처 및 마이크로서비스를 위한 기반 역할 

카프카 문서에는 특정 고객 사례도 나와 있다. 예를 들어 뉴욕 타임즈가 게시된 콘텐츠를 아파치 카프카와 카프카 스트림 API를 사용하여 실시간으로 다양한 애플리케이션과 시스템에 저장 및 배포하여 독자에게 제공한 사례 등이 있다. 

스트리밍 데이터 플랫폼 선택을 위한 기준 
스트리밍 데이터 플랫폼의 핵심 성과 지표(KPI)는 이벤트 속도, 처리량(이벤트 속도x이벤트 크기), 지연, 안정성, 주제의 수(게시-구독 아키텍처인 경우)이다. 확장은 클러스터링된 지오메트리에 노드를 추가하는 방법으로 수행되며, 이렇게 하면 안정성도 함께 높아진다. 서버리스 플랫폼에서는 확장이 자동으로 된다. 모든 스트리밍 데이터 플랫폼이 모든 KPI를 충족하는 것은 아니다. 

클라이언트 애플리케이션은 자체 개발자나 컨설턴트가 작성하기 때문에 클라이언트 프로그래밍 언어 지원은 스트리밍 데이터 플랫폼마다 다를 수 있다. 예를 들어 오픈소스 아파치 카프카는 공식적으로 자바 또는 스칼라(둘 모두 JVM 언어)에서 스트림 API를 호출할 수 있는 선택권을 부여하지만, librdkafka라는 커뮤니티 프로젝트는 C/C++, 고, 닷넷, 파이썬을 포함한 다른 클라이언트 언어를 지원한다. 컨플루언트는 자체적으로 librdkafka를 위한 서명된 공식 바이너리 집합을 관리한다. 

반면 아파치 스톰은 아파치 스리프트(Thrift) 교차 언어 컴파일러를 통해 모든 프로그래밍 언어에서 사용 가능하도록 설계됐다. 아파치 펄사는 자바, 고, 파이썬, C++, Node.js, 웹소켓, C#으로 된 클라이언트를 지원한다. 아마존 키네시스(Kinesis) 스트림 API는 아마존 SDK 또는 CDK가 있는 모든 언어(자바, 자바스크립트, 닷넷, PHP, 파이썬, 루비, 고, C++, 스위프트)를 지원한다. 

연결 지원도 차별화 요소가 될 수 있다. 모든 데이터 소스에 대한 커넥터가 이미 테스트를 거쳐 사용 가능하다면 이상적이다. 예를 들어 컨플루언트가 제시하는 카프카용 커넥터 목록에는 120개 이상의 커넥터가 있는데, 소스 전용(예: 스플렁크)도 있고 싱크 전용(예: 스노우플레이크)도 있으며 싱크와 소스 모두 가용한 커넥터도 있다(예: 마이크로소프트 SQL 서버). 컨플루언트의 목록에는 커뮤니티에서 개발된 커넥터도 포함된다. 자바로 직접 카프카 커넥터를 만들어야 한다면 카프카 커넥터 API를 사용할 수 있다. 

스트리밍 데이터 플랫폼을 호스팅할 위치를 결정할 때는 데이터 소스와 싱크의 위치를 고려해야 한다. 일반적으로는 스트림의 지연을 최소화하는 것이 좋으므로 구성요소를 서로 가까이 둬야 한다. 반면 스트리밍 데이터 플랫폼 중 일부는 지리적으로 분산된 클러스터를 지원하며, 이 경우 멀리 떨어진 소스와 싱크의 지연을 줄일 수 있다. 

스트리밍 데이터 플랫폼의 관리 편의성도 고려해야 한다. 일부 플랫폼은 전문 지식이 없으면 구성과 유지관리가 어렵기로 정평이 나 있다. 그 외, 특히 상용 지원이 제공되는 클라우드 서버는 관리하기가 매우 쉬운 것으로 유명하다. 주요 스트리밍 데이터 플랫폼 및 서비스는 다음과 같다.

아마존 키네시스(Amazon Kinesis)
아마존 키네시스를 사용하면 실시간 스트리밍 데이터를 대규모로 수집, 처리, 분석할 수 있다. 데이터 서비스 세 가지(데이터 스트림(Data Streams), 데이터 파이어호스(Data Firehose), 데이터 애널리틱스(Data Analytics))와 미디어 서비스 하나(비디오 스트림(Video Streams))가 있다. 키네시스 데이터 스트림은 수천 개의 소스로부터 초당 수 기가바이트의 데이터를 지속적으로 캡처할 수 있는 흡수 서비스다. 

키네시스 데이터 애널리틱스는 SQL 또는 아파치 플링크로 실시간으로 데이터 스트림을 처리할 수 있다. 키네시스 데이터 파이어호스는 데이터 스트림을 캡처, 변환해서 기존 비즈니스 인텔리전스 툴을 사용한 근실시간 분석을 위해 AWS 데이터 저장소에 로드할 수 있다. SQL 또는 플링크를 사용하는 대신 프로그램으로 스트림을 처리하려는 경우에는 키네시스 데이터 애널리틱스 대신 AWS 람다 서버리스 함수를 사용할 수도 있다. 

아파치 플링크(Apache Flink) 
아파치 플링크는 비한정(unbounded) 및 한정(bounded) 데이터 스트림에 대한 상태 저장 계산(stateful computation)을 위한 오픈소스 자바/스칼라/파이썬 프레임워크 및 분산 처리 엔진이다. 플링크는 일반적인 모든 클러스터 환경에서 실행되도록 설계됐으며, 모든 규모에서 인메모리 속도로 계산을 수행한다. 플링크는 하둡 얀(YARN), 아파치 메소스(Mesos), 쿠버네티스와 같은 일반적인 클러스터 리소스 관리자와 통합되지만 독립형 클러스터로도 실행할 수 있다. 

아파치 카프카(Apache Kafka) 
아파치 카프카는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위한 오픈소스 자바/스칼라 분산 이벤트 스트리밍 플랫폼이다. 카프카 이벤트는 주제별로 정리되어 영구 저장된다. 카프카는 링크드인(LinkedIn)이 처음 개발했으며, 상용 컨플루언트 버전을 포함해 이벤트 스트리밍 시장의 절반을 차지하고 있다. 카프카에는 다음과 같은 5개의 핵심 API가 있다. 
  • 어드민(Admin) API : 주제, 브로커 및 기타 카프카 개체 관리, 검사 
  • 프로듀서(Producer) API : 하나 이상의 카프카 주제에 이벤트 스트림 게시(쓰기) 
  • 컨슈머(Consumer) API : 하나 이상의 주제를 구독(읽기)하고 이 주제에 생성된 이벤트 스트림을 처리 
  • 카프카 스트림(Kafka Streams) API : 스트림 처리 애플리케이션 및 마이크로서비스 구현. 변환, 집계 및 조인과 같은 상태 저장 작업, 윈도잉, 이벤트 시간 기반의 처리를 포함한 이벤트 스트림 처리를 위한 고수준 함수를 제공한다. 하나 이상의 주제에서 입력을 읽어 하나 이상의 주제에 출력을 생성한다. 즉, 입력 스트림을 출력 스트림으로 변환한다. 
  • 카프카 커넥트(Kafka Connect) API : 카프카와 통합이 가능하도록 외부 시스템 및 애플리케이션을 대상으로 이벤트 스트림을 소비(읽기)하거나 생산(쓰기)하는 재사용 가능한 데이터 가져오기/내보내기 커넥터를 구축하고 실행한다. 예를 들어 포스트그레SQL과 같은 관계형 데이터베이스에 대한 커넥터는 테이블 집합의 모든 변경을 캡처할 수 있다. 그러나 카프카 커뮤니티에서 이미 즉시 사용 가능한 수백 가지의 커넥터를 제공하므로 일반적으로 자체 커넥터를 구현할 필요는 없다. 
 
아파치 펄사(Apache Pulsar) 
아파치 펄사는 오픈소스 클라우드 네이티브 자바/C++파이썬 분산 게시-구독 메시징 및 스트리밍 플랫폼이다. 야후가 개발했다. 펄사의 특징은 다음과 같다. 
 
  • 펄사 인스턴스에서 여러 클러스터를 네이티브로 지원. 클러스터 간 메시지의 매끄러운 지리적 복제 
  • 매우 낮은 게시 및 종단간 지연 
  • 100만 건 이상의 주제까지 원활한 확장성 
  • 자바, 고, 파이썬, C++에 대한 바인딩이 있는 간단한 클라이언트 API 
  • 여러 주제 구독 모델(배타적, 공유, 페일오버) 
  • 아파치 북키퍼(BookKeeper)가 제공하는 영구 메시지 스토리지를 통한 메시지 전달 보장 
  • 스트림 네이티브 데이터 처리를 위한 가벼운 서버리스 컴퓨팅 프레임워크인 펄사 펑션(Pulsar Functions) 
  • 펄사 펑션을 기반으로 하며 아파치 펄사 안팎으로 데이터 이동을 쉽게 해주는 서버리스 커넥터 프레임워크인 펄사 IO 
  • 데이터가 오래되면 핫/웜 스토리지에서 콜드/자기 스토리지(아마존 S3, 구글 클라우드 스토리지 등)로 데이터를 덜어내는 계층형 스토리지 
 
아파치 삼자(Apache Samza) 
아파치 삼자는 분산 오픈소스 스칼라/자바 스트림 처리 프레임워크로, 아파치 카프카와 함께 링크드인이 처음 개발했다. 삼자는 아파치 카프카를 포함한 여러 소스의 데이터를 실시간으로 처리하는 상태 저장 애플리케이션을 구축할 수 있게 해준다. 삼자의 특징은 다음과 같다. 
 
  • 통합 API : 데이터 소스로부터 독립적인 방식으로 애플리케이션 로직을 기술하는 간단한 API. 동일한 API가 일괄 및 스트리밍 데이터를 모두 처리할 수 있다. 
  • 모든 수준에서 플러그 가능 : 모든 소스의 데이터를 처리 및 변환한다. 삼자는 아파치 카프카, AWS 키네시스, 애저 이벤트 허브(애저 네이티브 서비스형 카프카), 일래스틱서치(Elasticsearch) 및 아파치 하둡과 기본 통합된다. 또한 자체 소스와 통합하기도 매우 쉽다. 
  • 임베디드 라이브러리 : 기존 애플리케이션과 통합되며 스트림 처리를 위해 별도의 클러스터를 가동 및 운영할 필요가 없다. 삼자를 자바/스칼라 애플리케이션에 내장된 가벼운 클라이언트 라이브러리로 사용할 수 있다. 
  • 한번 만들어서 모든 곳에서 실행 : 퍼블릭 클라우드에서 컨테이너화된 환경, 베어메탈 하드웨어에 이르기까지 모든 곳에서 애플리케이션을 실행할 수 있는 유연한 배포 옵션 
  • 매니지드 서비스 : 아파치 얀을 포함한 인기 있는 클러스터 관리자와의 통합을 통해 스트림 처리를 관리형 서비스로 실행한다. 
  • 내결함성 : 장애 발생 시 작업 및 관련된 상태를 투명하게 마이그레이션한다. 삼자는 빠른 장애 복구를 위해 호스트 어피니티 및 증분 체크포인팅을 지원한다. 
  • 대규모 환경 지원 : 몇 테라바이트에 이르는 상태를 사용하고 수천 개의 코어에서 실행되는 애플리케이션에서 검증됐다. 삼자는 링크드인, 우버, 트립어드바이저, 슬랙을 포함한 다수의 대기업을 움직이는 기술이다. 
 
아파치 스파크(Apache Spark) 
아파치 스파크는 다중 언어 엔진으로, 단일 노드 머신 또는 클러스터에서 데이터 엔지니어링, 데이터 과학, 머신러닝을 실행하기 위한 목적으로 주로 스칼라로 작성됐다. 일괄 데이터와 실시간 스트리밍 데이터를 모두 처리한다. 스파크의 출생지는 U.C. 버클리이며, 스파크를 만든 사람들은 데이터브릭스(Databricks)를 창업했다. 

아파치 스톰(Apache Storm) 
아파치 스톰은 주로 클로저(Clojure)를 사용해서 만들어진 분산 스트림 처리 계산 프레임워크다. 스톰에서 스트림은 분산 방식으로, 병렬로 처리 및 생성되는 튜플의 비한정 시퀀스다. 토폴로지는 스트림 그룹과 연결되는 스파우트(spout)와 볼트(bolt)의 그래프다. 토폴로지는 스트림을 처리하는 로직을 정의하며 스파우트는 토폴로지의 스트림 소스다. 토폴로지의 모든 처리는 볼트에서 이뤄진다. 스톰은 카프카, 카산드라, 레디스, 키네시스를 포함한 다른 많은 시스템 및 라이브러리와 통합된다. 

애저 스트림 애널리틱스 
애저 스트림 애널리틱스는 실시간 분석 및 복합 이벤트 처리 엔진으로, 여러 소스에서 오는 빠른 스트리밍 데이터를 동시에 대량으로 분석 및 처리하도록 설계됐다. 디바이스, 센서, 클릭스트림, 소셜 미디어 피드, 애플리케이션을 포함한 여러 입력 소스로부터 추출된 정보에서 패턴과 관계를 파악할 수 있다. 이런 패턴을 사용해 작업을 트리거하고 경보 생성하기, 보고 툴에 정보 공급하기 또는 나중에 사용하기 위해 변환된 데이터 저장하기와 같은 워크플로우를 시작할 수 있다. 

컨플루언트 플랫폼 및 컨플루언트 클라우드(Confuent Platform and Confluent Cloud) 
컨플루언트 플랫폼은 카프카를 처음 만든 사람들이 아파치 카프카를 상용화한 버전으로, 온프레미스 및 클라우드에서 제공된다. 컨플루언트 클라우드는 탄력적인 완전 관리형 서버리스 클라우드 네이티브 서비스로 새롭게 구축됐다. AWS, 마이크로소프트 애저, 구글 클라우드에서 실행된다. 

구글 클라우드 데이터플로우(Google Cloud Dataflow) 
구글 클라우드 데이터플로우는 아파치 빔(Beam) 기반의 완전 관리형 서버리스 통합 스트림 및 일괄 데이터 처리 서비스다. 아파치 빔은 구글에서 만들었으며, 데이터플로우, 플링크, 스파크 및 헤이즐캐스트 제트(Hazelcast Jet)를 위한 통합 SDK다. 

버베리카(Ververica) 
버베리카는 아파치 플링크를 만든 사람들이 개발한 엔터프라이즈 스트림 처리 플랫폼이다. 아파치 플링크를 위한 다중 테넌트, 인증, 역할 기반 액세스 제어 및 자동 확장을 제공한다. 지금까지 살펴본 바와 같이 선택할 수 있는 실시간 스트리밍 데이터 플랫폼, 실시간 분석 옵션, 스트리밍 데이터를 저장하고 일괄 분석하기 위한 옵션은 많다. 스트리밍 데이터 KPI에 주의를 기울이면서 성장을 염두에 두고 시스템을 설계하고, 무엇보다 프로덕션으로 진행하기 전에 개념 증명을 수행해야 한다. editor@itworld.co.kr
CIO Korea 뉴스레터 및 IT 트랜드 보고서 무료 구독하기
추천 테크라이브러리

회사명:한국IDG 제호: CIO Korea 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아01641 등록발행일자 : 2011년 05월 27일

발행인 : 박형미 편집인 : 천신응 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.