데이터 엔지니어 기술 블로그

[🧙Kafka] ETL IS DEAD, LONG-LIVE STREAMS: 네하 나크헤데 본문

카테고리 없음

[🧙Kafka] ETL IS DEAD, LONG-LIVE STREAMS: 네하 나크헤데

jun_yeong_park 2021. 7. 20. 00:45
반응형

개요

카프카를 활용한 인프라를 설계해보기 위해 찾아보다가 Confluent 공동 창립자 중 한명인 네하 나크헤데의 프레젠테이션을 보게 되었다. 이번에는 그 내용을 정리해보려고 한다.

 

 

프레젠테이션 내용

지난 10년간 데이터 시스템은 많이 바뀌었다. 여러 DB에서 데이터 웨어하우스로 ETL하여 데이터를 넣는 방식이었다. 최근 몇가지 데이터 추세는 ETL 아키텍처의 극적인 변화를 주도하고 있다. Single Server Database는 전사적 규모로 분산 데이터 플랫폼으로 바뀌고 있다. 그리고 일반적인 데이터가 아닌 logs, sensors, metrics 등으로 데이터 타입이 많아지고 있으며 스트림 데이터는 점점 보편화(increasingly ubiquitous)되고 있다.

그래서 그 결과는 아주 복잡한 인프라가 된다.

 

스트림 플랫폼을 사용하면 중앙 집중식으로 좀 더 간단하게 인프라를 구성할 수 있다.

 

a short history of data integration

ETL 방식

ETL은 1990년대에 소매 조직에서 구매자 트렌드를 분석하기 위해 시작되었다. 

  1. Extract data from a database.
  2. Transform into destination warehouse schema.
  3. Load into a central data warehouse.

ETL 방식은 예전부터 사용되어 왔으나 data coverage가 낮다. ETL에는 다음과 같은 단점들이 있다.

  1. global schema가 필요하다.
  2. 데이터 정리 및 큐레이션은 수동이며 근본적으로 오류가 발생하기 쉽다(error-prone).
  3. ETL 운영 비용이 높고, 시간과 자원이 집약적이다.
  4. 데이터베이스와 데이터 웨어하우스를 연결하는데에 협소하게 초점이 맞도록 되어있다.

 

EAI 방식

EAI란 Enterprise Application Integration을 말한다. 중앙에 브로커가 있으며 공통 데이터 모델을 사용한다. EAI를 요약하자면 기존의 은행에는 창구와 은행만 있었으나 현재는 ATM, 인터넷 뱅킹, 모바일 뱅킹, 창구 등 여러가지가 존재한다. 하지만 똑같은 처리를 해주어야 하기 때문에 각 서비스들을 공통된 규약을 사용하는 EAI로 묶고 Core Banking System과 통신을 하는 방식으로 처리한다.

 

 

EAI, ETL, Streaming Platform

EAI, ETL, Streaming Platform을 정리하자면 다음과 같다.

 

 

Streaming Platform

스트리밍 플랫폼

  1. real-time, scalable message bus
  2. 모든 데이터 처리 대상을 공급하기 위한 source-of-truth 파이프라인 역할을 한다.
  3. 상태 저장 스트림 처리 마이크로 서비스의 building block 역할을 한다.
    • building block이란 집 짓는 기본 단위(벽돌)을 말한다.

Batch vs Streaming

  1. Batch Data Integration이 아닌 Streaming Data Integration을 사용하는 것이 좋다.
  2. Batch ETL이 아닌 Streaming ETL을 사용하는 것이 좋다.

 

 

현재 데이터 생태계의 요구사항

  1. high-volume
  2. high-diversity data
  3. Fault tolerance
  4. Parallelism
  5. Latency
  6. Delivery semantics
  7. Operations and monitoring
  8. Schema management

 

Event-centric thinking

이벤트 중심으로 아키텍처를 구축하면 다음과 같이 구축할 수 있다.

Streaming Platform을 사용한 경우

 

기존 시스템

 

Streaming Platform을 사용한 경우

 

 

 

 

KAFKA

카프카는 스트리밍 데이터 파이프라인을 만들 수 있게 해주며, 스트리밍을 하며 변환을 할 수 있게 해준다.

어플리케이션 통합을 위한 확장 가능한 메세징 백본으로 사용할 수 있다.

 

Kafka Streams

ETL에서 T역할을 해준다.

다양한 종류의 연산자가 있는 편리한 DSL이며 join, map, filter와 같은 연산자가 존재한다. DSL이란 특정 영역을 타겟하고 있는 언어를 말하며 JAVA와 SQL중 SQL이라고 할 수 있다.

 

kafka Connect

카프카 커넥트는 ETL에서 E와 L의 역할을 해준다.

Source Connector는 데이터 소스에서 카프카로 보내는 역할을 하고, Sink Connector는 카프카에서 다른 목적지로 보내는 역할을 한다.

 

 

Real-time MapReduce vs Event-driven microservices

Real-time Mapreduce 

  • Central cluster
  • Custom packaging & deployment & monitoring
  • Suitable for analytics-type use cases
  • Example: Spark Streaming, Flink

Event-driven microservices

  • Embedded library in any Java app
  • Just kafka and your app
  • Makes stream processing accessible to any use case.
  • Example: Kafka Streams API

 

 

결론

프레젠테이션에서는 ETL의 시대는 갔고 스트리밍 플랫폼을 사용해야한다고 말하지만, 아직은 디버그하기 힘드는 문제 등 단점도 여러개 있는 것 같아서 필요한 곳에서 사용하는 것이 적당할 것 같다.

 

 

반응형
Comments