본문 바로가기

AWS

[AWS] 대용량 스트림 데이터 처리 플랫폼 - Kinesis

AWS Kinesis

Kinesis를 통해 대용량 스트리밍 데이터를 수집하고, 처리 및 분석까지 가능하다.

 

- 스트리밍 데이터란?

데이터 레코드를 동시에 작은 크기(킬로바이트 단위)로 전송하는 수천개의 데이터에 의해 지속적으로 생성되는 데이터

 

- 스트림 처리 vs 일괄 처리

스트림 처리의 이점이나 용도를 이해하기 위해서는 일괄 처리와 스트리밍 처리를 비교해서 파악하면 된다.

 

일괄 처리는 보통 모든 데이터에서 파생된 결과의 처리 및 분석을 가능하게 하므로 대량의 데이터를 처리한다.

반면에 스트림 처리는 수집하는 각 데이터 레코드에 대한 처리로 실시간 모니터링 및 응답 기능에 더욱 적합하다.

 

출처: AWS

많은 조직이 두 가지 접근 방식을 결합하여 하이브리드 모델을 구축하고 실시간 계층과 배치 계층을 유지하게 된다.

 

Amazon Kinesis를 활용하면, 데이터를 처리해 실시간 통찰력을 추출한 다음 S3와 같은 스토어에 저장한 후 다양한 일괄 처리 사용 사례에 맞게 변환 및 로드할 수 있다.

 

Amazon Kinesis 스트리밍 플랫폼 구성

 

1. Kinesis Data Stream

 

Producer인 웹 페이지, 어플리케이션 등에서 스트리밍 데이터를 Data Stream으로 계속 보내며, 여러 Consumer에서 실시간으로 데이터를 처리하는 아키텍처이다.

 

EC2 인스턴스 등에서 직접 데이터를 처리하는 애플리케이션을 구성할 수도 있지만, 뒤에 나오는 Kinesis Firehose를 통해 결과를  AWS 서비스에 저장할 수도 있다.

 

- Data Record: Kinesis stream에 저장되는 단위로 시퀀스 번호, 파티션 키, 데이터 BLOB(변경할 수 없는 바이트 시퀀스)로 구성

 

- Shard: 데이터 스트림에서 고유하게 식별되는 레코드 시퀀스로 스트림은 하나 이상의 샤드로 구성되며, 각 샤드는 고정된 용량을 제공

 

Partition Key: 스트림 내에서 샤드별로 데이터를 그룹화. 즉, 파티션 키를 사용해서 레코드가 보내질 샤드를 구분지을 수 있다!

 

- Sequence Number: 각 데이터 레코드에는 샤드 내 파티션-키마다 고유한 시퀀스 번호가 있음

 

간단한 kinesis cli 명령어를 통해 data stream에 record를 삽입할 수 있다. (어플리케이션에서는 KPL이나 AWS SDK를 사용하면 된다)

 

$ aws kinesis put-record --stream-name {stream_name} --partition-key {partition_name} --data {data}

👍 Kinesis는 실시간으로 샤드를 나누거나 합쳐서, 변화하는 데이터 양에도 대응할 수 있다. (split, merge)

 

 

2. Kinesis Firehose Delivery Stream

Firehose Delivery Stream은 스트리밍 데이터를 S3 버킷과 같은 저장소, 분석 도구, Data Lake 등으로 안정적으로 전달할 수 있다.

 

간단하게 스트리밍 데이터를 캡처하여 로드할 수 있을뿐만 아니라 압축, 처리, 변환의 기능도 제공하므로 편리하게 사용 가능하다.

 

버퍼 크기와 간격을 설정해 데이터를 특정 크기로 특정 기간동안 버퍼링하여 대상으로 전달하게 된다.

 

 

이 외에도 Kinesis 플랫폼엔 다음과 같은 기능도 있다.

 

3. Kinesis Data Analytics: SQL 또는 Apache Flink로 데이터 스트림 분석

4. Kinesis Video Stream: 비디오 스트림을 캡처, 처리 및 저장