메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일 >

데이터 처리, KSQL로 더 많이, 더 빠르게, 더 쉽게

한빛미디어

|

2018-04-06

|

by Michael Noll

11,941

Apache Kafka를 위한 새로운 스트리밍 SQL 엔진 살펴보기

 

현대 비즈니스의 중심에는 데이터가 있고, 이 데이터는 끊임없이 빠른 속도로 변화하며 그 양도 증가하고 있습니다. 스트림 프로세싱은 이러한 데이터를 기업들이 실시간으로 활용할 수 있게 하는 것입니다. 이미 Netflix, Uber, Airbnb, PayPal, New York Times와 같은 수천, 수만개의 기업들은 각자의 산업계에서 새로운 판을 짜기 위해 Apache Kafka와 같은 스트리밍 프로세싱 플랫폼을 선택하여 사용하고 있습니다. Kafka라는 숨은 기반 위에서 호텔 및 항공편 예약, 택시 타기, 신문 읽기, 온라인 쇼핑, 비디오 게임, 송금 등 여러가지 일상생활 서비스가 제공되고 있는 것입니다.

 

그런데  스트림 프로세싱에 대한 진입장벽은 여전히 아주  높습니다. Apache Kafka Streams API를 비롯하여 오늘날 가장 널리 사용되는 스트림 프로세싱 기술을 사용하기 위해선 Java, Scala와 같은 프로그래밍 언어로 코드를 작성할 줄 알아야 하기 때문입니다. 이 장벽으로 인해 많은 기업들이 스트림 프로세싱의 혜택을 온전히 누리지 못했지만, 다행히 이제는 더 좋은 방법이 있습니다.

 

Kafka를 위한 KSQL 시작하기

 

최근 소개된 KSQL(Apache Kafka용 스트리밍 SQL 엔진)은 스트림 프로세싱에 대한 진입장벽을 상당히 낮췄습니다. 많은 양의 코드를 작성하지 않고도 다음과 같이 간단한 SQL으로 스트림 프로세싱을 시작할 수 있습니다.

 

SELECT * FROM payments-kafka stream WHERE fraud_probability > 0.8,

 

이게 전부입니다. 코드 상 일견 명백하게 드러나지는 않지만 이 KSQL 쿼리는 기업의 데이터 수요에 알맞게 분산처리(distributed), 확장성(scalable), 탄력성(elastic), 그리고 실시간(real-time) 처리능력까지 갖춘 코드입니다.

 

KSQL로는 위의 간단한 예제보다 훨씬 많은 것을 할 수 있습니다. KSQL은 오픈소스(Apache 2.0 라이센스)이며 Kafka의 Streams API 위에 구축되어 있습니다. 이는 KSQL이 필터링, 변환, 집계, 조인, 윈도우, 세션화와 같은 광범위한 스트림 프로세싱을 작업을 지원한다는 것을 뜻합니다. 이들을 활용해 실시간으로 비정상적 또는 악의적 활동 감지, 인프라 및 IoT 장치 모니터링, 유저에 대한 세션 기반 분석, 실시간 데이터 ETL(역주: 추출-변환-적재) 및 기타 다양한 작업을 수행할 수 있습니다.

 

아마도 여러분은 지금 '그래서 결국 KSQL을 어디에 사용하지?' 라고 생각하고 있을겁니다. 그래서  KSQL로 손쉽게 시도해볼 수 있는 몇 가지 사례를 소개해 드리고자 합니다.

 

실시간 모니터링 및 실시간 분석

 

KSQL은 실시간 계산이 필요하지만 사용자가 직접 모니터링하거나 경고 알림을 받기 어려운 영역의 비즈니스 레벨 지표를 정의하는 데 사용될 수 있습니다. 예를 들어, 트리플-A 비디오 게임 프랜차이즈 기업은 KSQL을 활용하여 온라인 플레이어에 대한 실시간 수치 정보(예를 들어, 플레이어의 참여(engagement) 수준, 최신 확장판이 게임 플레이 시간을 증가시켰는지 여부 등)를 파악할 수 있고, e-커머스 업체는 버려진 장바구니의 갯수에 대한 정보(최근 업데이트가 상품 구매 과정을 이전보다 편리하게 변화시켰는지 여부 등)를 파악할 수 있습니다. 한편 KSQL은 비즈니스 애플리케이션의 정확도에 대한 개념을 정의하고, 실제 프로덕션 환경에서 이 정확도가 달성되고 있는지 체크하는 데에도 사용될 수도 있습니다.

 

KSQL은 날것의 이벤트 스트림으로부터 적절한 지표를 정의해내는 작업을 아주 간단하게 합니다. 그 이벤트 스트림은 데이터베이스 업데이트, 애플리케이션, 모바일 기기, 기타 소스 등 어떠한 소스로부터 생성된 것이어도 괜찮습니다. 다음은 그 예시입니다.

 

CREATE TABLE possibly_failing_vehicles AS

   SELECT vehicle, COUNT(*)

   FROM vehicle_monitoring_stream

   WINDOW TUMBLING (SIZE 5 MINUTES)

   WHERE  event_type = 'ERROR'

   GROUP BY vehicle

   HAVING COUNT(*) > 2;

 

 

온라인 데이터 통합(integration) 및 데이터 보강(enrichment)

 

기업에서 수행되는 대부분의 데이터 프로세싱은 데이터 보강 영역에 속해있습니다. 즉, 여러 데이터베이스에서 데이터를 가져와서 변환하고 결합하여 키-값 저장소나 검색 인덱스, 캐시, 또는 데이터를 서빙할 수 있는 다른 데이터베이스 시스템에 저장하는 일과 관련되어 있습니다. KSQL을  Oracle, MySQL, Elasticsearch, HDFS, S3와 같은 시스템 활용을 위한 Kafka 커넥터와 함께 사용한다면, 배치(batch)형태의 데이터 통합과정을 실시간(real-time) 데이터 통합과정으로 변화시킬 수 있습니다.

 

아래 KSQL 쿼리에서 볼 수 있듯이, 여러분은 스트림테이블 조인을 통해 데이터스트림에 메타데이터를 추가하여 데이터를 보강할 수도 있고, 데이터스트림을 다른 시스템으로 적재하기 전에 개인식별정보(PII)를 이용하여 간단한 필터링을 수행할 수도 있습니다.

 

CREATE STREAM vip_users AS

   SELECT user_id, user_country, web_page, action

   FROM website_clickstream c

   LEFT JOIN users u ON u.user_id = c.user_id

   WHERE u.level = 'Platinum';

 

 

보안 및 이상 탐지

 

KSQL 쿼리를 통해 이벤트스트림을 시계열 집계수치로 변환할 수 있습니다. 이 수치들은 Kafka-Elastic 커넥터를 통해 Elastic으로 보내질 수도 있고, Grafana와 같은 실시간 대시보드에서의 시각화 작업에 활용될 수도 있습니다. KSQL은 모니터링 혹은 애널리틱스 측면에서 보안에도 활용될 수 있습니다. 다만 KSQL은 애플리케이션이나 비즈니스 로직의 동작여부에 대한 모니터링보다는 사기, 어뷰징, 스팸, 침입 등의 악의적 행동에 대한 패턴을 탐지하는 데에 유용합니다.

 

KSQL은 간단하지만 정교하게, 실시간으로 이러한 패턴을 정의하고 실시간 스트림을 쿼리할 수 있는 방식을 제공합니다. 다음은 그 예시입니다.

 

CREATE TABLE possible_fraud AS

   SELECT card_number, COUNT(*)

   FROM authorization_attempts

   WINDOW TUMBLING (SIZE 5 SECONDS)

   GROUP BY card_number

   HAVING COUNT(*) > 3;

 

 

스트림과 데이터베이스에 관하여

 

이 짧은 글에서 보여줄 수 있는 것보다 KSQL의 활용방법은 훨씬 더 다양합니다. KSQL은 다수 차량의 상태(예를 들어, 예방적 차원에서 트럭 유지보수 조치가 근 시일 내에 필요할 것인지)나 IoT 기기, 홈 자동화 센서(예를 들어, 왜 2층에서 급작스러운 온도 상승이 있는지)를 모니터링 하거나, 실시간으로 Oracle 데이터베이스 업데이트 상황을 분석하는 데에도 사용될 수 있습니다. 일부 창의적인 사용자들은 실시간으로 자동차 경주 원격 측정 데이터를 실시간으로 분석하는 데 사용하기도 합니다.

 

그러나 이런 구체적인 예에서 한 발 뒤로 물러나 필자의 의견을 말해보자면, KSQL의 가장 큰 매력은 KSQL이 데이터베이스에 대한 기존의 관념을 뒤집어 엎음으로써 Kafka와 같은 스트림의 세계와 Oracle, MySQL 등등의 데이터베이스의 세계를 이어주는 것이라고 생각합니다. KSQL은 Kafka Streams API와 유사하게 STREAM과 TABLE이라는 두 가지의 핵심적인 데이터 추상화 방법을 제공하는데, 이 기능 덕분에 데이터에 대한 작업을 스트림 형태로도, 테이블 형태로도 할 수 있습니다. 실제로 대부분의 실시간 데이터 처리는 스트림 형태 처리 및 테이블 형태 처리를 동시에 요하기 때문에, 중요한 특징입니다.

 

여러분이 소매업자라고 가정하고 하나 작은 예시를 들어보겠습니다. 여러분KSQL을 사용해서 Kafka에 있는 소비자 행동 이벤트의 실시간 스트림(구매정보, 위치정보 변화 등)을, 소비자에 대한 별도의 내/외부 정보와 조인하여, 지속적으로 업데이트되는 360도 고객 프로필 테이블로 집계할 수 있습니다. 이 통합 테이블은 KSQL 또는 Kafka Streams API를 통해 이뤄지는 결제 이벤트 스트림 중 사기성 결제를 탐지하는 데에 사용될 수 있습니다. 또한, Kafka의 Connect 프레임워크와 커넥터를 활용해 통합 테이블 내의 데이터 자체를Oracle, PostgreSQL, MySQL 등 기업에서 이미 사용 중인 RDBMS에 실시간으로 스트리밍하는 데에 사용할 수도 있습니다. 이 모든 것은 분산형 스트리밍 플랫폼이라는 Apache Kafka의 강력한 기술기반 위에서 동작하기 때문에, 스케일러블(at scale)하며, 결함 내성(fault tolerant)이 있고, 실시간(real-time)으로 수행된다는 특징을 지니고 있습니다.

 

더 알고싶다면

 

KSQL을 직접 만져보시길 바랍니다! 설치 및 실행에 몇 분 걸리지 않습니다.

 

참고

*****

원문 : Big, fast, easy data with KSQL

번역 : 김현지

댓글 입력
자료실