스트리밍의 첫걸음 - 데이터 스트리밍 처리의 개념 정리

스트리밍 처리의 중요성이 점점 중요해지고 있습니다. Apache Spark Streaming부터 새로운 스트림 처리의 강자인 Apache Flink와 같은 스트리밍 처리 엔진 등의 사용 사례가 많아지고 있습니다. 그래서 이번 기회에 스트리밍 처리에 대한 기본 개념들에 대해 정리해보고자 합니다.

스트리밍의 정의는 무엇일까요? 스트리밍은 다양한 의미가 있을 수 있습니다. 그러나 데이터 처리의 관점에서 보았을 때 Streaming 101에 나와있는 문구가 잘 정의되어 있는 것 같습니다.

a type of data processing engine that is designed with infinite data sets in mind.

위의 정의된 대로 “무한의 데이터 셋을 염두에 두고 설계된 데이터 처리 엔진의 유형"이라고 생각됩니다. 앞으로 “스트리밍"이라는 용어를 사용할 때는 Unbounded data를 처리하기 위해 설계된 실행 엔진을 의미합니다. 그럼 이제 이 스트리밍 처리에서 사용되는 기본 용어들에 관해 살펴보도록 하겠습니다.

Unbounded data vs Bounded data

Event time vs Processing time

데이터 처리 시스템에서는 일반적으로 대표적인 두가지 시간이 있습니다. 바로 이벤트 시간과 처리 시간입니다. 이번 포스트에서는 이벤트 시간과 처리 시간에 관해서는 간단히 설명하겠습니다. 이벤트 타임과 처리 시간과 관련해서는 본 블로그에 이벤트 시간 처리와 워터마크에서 상세히 설명하고 있습니다.

이상적인 경우에 이벤트 시간과 처리 시간이 동시에 처리됩니다. 그러나 일반적으로 다양한 요소들에 의해서 두 시간 사이에 차이가 발생합니다. 다음 그림은 이벤트 시간과 처리 시간의 관계를 나타내는 그래프입니다.

실제 처리 되는 시간의 경우 이상적인 경우와 차이가 나는 것을 볼 수 있습니다. 주로 이벤트 시간과 처리 시간의 차이를 skew라고 표현합니다. 이렇게 skew 발생하는 원인들은 네트워크 지연과 관련된 이슈나 실행 엔진, 하드웨어 이슈, 분산 시스템 로직 문제 등 굉장히 다양합니다.

데이터 처리 패턴

Bounded data processing

Bounded data processing은 우리가 흔히 알고 있는 MapReduce와 같은 데이터 처리 엔진을 통해 데이터를 처리하고 정제된 데이터 셋을 만드는 것입니다. 제한된 데이터를 전부 읽어서 처리하는 것입니다.

Unbounded data processing

Unbounded data processing의 경우 Batch와 Streaming 2가지 방식으로 처리합니다.

Batch

배치에서 Unbounded data를 처리하는 경우 데이터를 배치 처리에 적합하게 데이터를 분할해야 합니다. 데이터를 분할하는 방법은 다음과 같이 2가지 방법이 있습니다.

Streaming

Unbounded data는 배치 처리와 다르게 스트리밍 처리에서 더 잘 처리할 수 있습니다. 스트리밍 처리에서 데이터를 처리하는 방법은 다음과 같습니다.

시간에 따른 윈도우 처리 방법

정리

지금까지 스트리밍에서 사용되는 개념들에 대해 살펴보았습니다. 이벤트 시간과 처리 시간의 차이를 설명하고 데이터 별로 배치와 스트리밍의 차이를 알아보았습니다. 이번 포스트를 통해서 데이터 스트리밍 처리의 기본 개념에 대해 익히셨을 것이라 생각됩니다.

References



comments powered by Disqus