Amazon Kinesis

xlwdn·2022년 10월 20일
0

Amazon Kinesis란?


aws에서 제공하는 완전관리형 실시간 스트리밍 데이터 처리 서비스이며, 기능에 따라 다음과 같이 나누어진다.

  • Kinesis Video Streams
  • Kinesis Data Streams
  • Kinesis Data Firehose
  • Kinesis Data Analytics

Kinesis Video Streams


라이브 비디오를 디바이스에서 aws로 스트리밍하고 저장할 수 있는 완전 관리형 서비스이다. 또한 비디오 처리를 위한 자체 애플리케이션을 빌드하거나 배치 중심 비디오 분석을 수행할 수 있다.

Kinesis Data Analytics를 활용하여 SQL 질의를 통해 스트리밍 데이터의 유입 데이터 필터링, 변환 및 요약 등의 기능을 수행할 수 있다.

Kinesis Video Streams 아키텍처


  • 생산자
    • 키네시스 비디오 스트림에 데이터를 저장하는 소스. 모바일 디바이스 등이 포함되며 오디오 피드, 이미지, RADAR 데이터와 같은 비영상 데이터를 전송할 수 있다.
      • 단일 생산자가 하나 이상의 비디오 스트림을 생성할 수 있다.(ex. 비디오 스트림 하나를 키네시스 비디오 스트림에 푸시하고, 오디오 데이터를 다른 스트림에 푸시할 수 있다.)
    • Kinesis Video Streams 생산자 라이브러리
      • 디바이스에 설치하고 구성할 수 있는 소프트웨어 및 라이브러리. 이러한 라이브러리를 통해 다양한 방식으로 업로드 가능하다. (ex. 실시간, 몇 초 후 버퍼링 또는 after the fact 미디어 업로드)
  • Kinesis 비디오 스트림
    • 라이브 비디오 데이터를 전송하거나, 선택적 저장, 실시간, 배치 혹은 애드혹 형식으로 데이터의 소비를 가능하게 할 수 있도록 해주는 리소스.
      • 일반적인 구성에선 생상자 하나만 존재함.
      • 스트림은 오디오, 비디오 및 타임 인코딩된 유사 데이터 스트림(ex. 깊이 센서 피드, RADAR 피드 등)을 전송하여 Kinesis 비디오 스트림을 생성함.
      • Aws Management Console 또는 AWS SDK를 사용해 프로그래밍 방식으로 구성할 수 있다.
  • 소비자
    • Kinesis 비디오 스트림에서 데이터를 가져와 열람하거나 처리, 또는 분석하는 역할. 일반적으로 이러한 소비자를 Kinesis Video Streams 애플리케이션이라고 함.
    • EC2 인스턴스에서 실행되도록 소비자 애플리케이션 생성 가능.
    • Kinesis Video Stream Parser Library: 키네시스 비디오 스트림즈 애플리케이션이 짧은 지연 시간으로 비디오 스트림에서 데이터를 안정적으로 가져올 수 있도록 하는 자바 애플리케이션에서 사용 가능한 도구 모음.
      • 애플리케이션이 프레임 자체의 처리 및 분석에 집중할 수 있도록 미디어에서 프레임 경계를 파싱함.

Kinesis Data Streams


대용량 데이터를 실시간으로 수집, 처리하는 서비스. 내부적으로는 샤드로 구성되어 있으며 이를 동적으로 증가/감소할 수 있고 샤드 수에 따른 보장된 전송시간을 제공한다.

주로 연속적으로 생산되는 대량의 데이터소스(1MB 이하)를 처리해야하는 파이프라인에 유용하다.

소비자는 EC2에서 사용하는 사용자 지정 애플리케이션 또는 Amazon Kinesis Data Firehose 전송 스트림을 사용하여 결과를 DynamoDB, Amazon Redshift, 또는 S3 등과 같은 서비스에 저장할 수 있다.

Kinesis Data Streams 아키텍처


  • 생산자
    • 애플리케이션, 클라이언트 등이 포함되며, 예시로는 AWS SDK, Kinesis Producer Library (KPL), Kinesis Agent 등이 있다.
    • 레코드는 Partition Key와 최대 1MB의 Data Blob으로 구성되며, 각 샤드는 초당 1MB 또는 1000개의 메시지를 제공할 수 있다.
  • Kinesis Data Streams
    • Streams는 N개의 샤드로 구성되며 이 샤드 개수는 스케일링할 수 있다.
    • 샤드가 많을수록 스트림을 통과할 수 있는 처리량이 증가하게 되며, 만약 생산자가 동일한 파티션 키를 사용하면 동일한 샤드로 데이터가 이동된다.
    • 요금은 프로비저닝된 샤드마다 부과되며, 보존 기간은 레코드를 추가한 이후 기본적으로 24시간으로 설정되고, 이 기간은 늘릴 수 있으나 추가 요금이 적용된다.(최대 365일)
    • 한 번 Kinesis에 들어가면 해당 데이터는 삭제될 수 없다.(immutability)
  • 소비자
    • 소비자에는 Kinesis Client Library (KCL), AWS SDK, 앱, 람다, Kinesis Data Firehose, Kinesis Data Analytics 등이 될 수 있다.
    • 소비자는 데이터 레코드를 받게 된다ㅏ.
    • Kinesis Data Streams를 지원하는 소비자는 여러 개일 수 있기 때문에 Pub/Sub 패턴이 생길 수 있다.
    • 소비 메커니즘
      • 공유 메커니즘: 모든 소비자 애플리케이션에 걸쳐 샤드마다 초 당 2MB를 공급한다.
      • 향상된 매커니즘: 향상된 소비자를 사용하면 소비자마다 샤드 당 초 당 2MB를 공급한다.

데이터 레코드


스트림즈에 저장되는 데이터의 단위이며, 파티션 키 + 시퀀스 넘버 + 데이터 블롭으로 구성되어 있다.

서버 측 암호화


Amazon Kinesis Data Streams 생산자가 민감한 데이터를 스트림에 입력할 때 자동으로 암호화할 수 있으며, AWS KMS를 이용해 구성할 수 있다.

Kinesis Data Firehose


실시간 스트리밍 데이터를 제공하기 위한 완전 관리형 서비스.

사용 시 애플리케이션을 쓰거나, 리소스를 관리할 필요가 없으며, Kinesis Data Firehose로 데이터를 보내도록 데이터 생산자 구성 시 지정한 대상으로 데이터를 자동으로 전송함.

데이터를 입수하여 목적지에 송신하기 전에 가공할 수 있으며, 이 가공에는 데이터를 정리하거나 다른 포맷으로 변경하는 등의 처리가 포함됨. (ex. Json 포맷의 데이터를 하둡에 적재하기 전에 Apache Parquet 포맷으로 변경 가능. KDF는 그러한 데이터 가공을 위해 AWS Lambda를 사용하여 custom한 데이터 가공 기능 제공. 또한, KDF는 raw 데이터 복사본을 백업을 위해 S3보낼 수 있음)

Kinesis Data Firehose 핵심 개념


  • Kinesis Data Firehose 전송 스트림
    • Kinesis Data Firehose의 기본 엔터티. Kinesis Data Firehose 전송 스트림을 생성한 다음 데이터를 전송하여 Kinesis Data Firehose를 사용.
  • record
    • 데이터 생산자가 Kinesis Data Firehose 전송 스트림으로 보내는 데이터. 레코드는 최대 100KB가 될 수 있음.
  • 데이터 생산자
    • 생산자는 Kinesis Data Firehose 전송 스트림으로 레코드를 전송. (ex. 전송 스트림에 로그를 보내는 웹 서버)
  • 버퍼 크기와 간격
    • Kinesis Data Firehose는 수신되는 스트리밍 데이터를 대상으로 전송하기 전에 특정 기간 동안 또는 특정 기간 동안 버퍼링함. Buffer Size(MB)로 되어 있으며, Buffer Interval 단위는 초이다.

Kinesis Data Firehose 데이터 흐름


Amazon S3 대상인 경우 스트리밍 데이터가 S3 버킷으로 전송된다. 데이터 변환이 활성화되면 선택적으로 소스 데이터를 다른 Amazon S3 버킷으로 백업할 수 있음.

Amazon Redshift 대상인 경우 스트리밍 데이터가 먼저 S3 버킷으로 전송된다. 그런 후, Kinesis Data Firehose가 Amazon Redshift 발행 COPY 명령을 사용하여 S3 버킷의 Amazon Redshift 클러스터로 데이터를 로드한다. 데이터 변환 활성화 시 선택적으로 소스 데이터를 다른 Amazon S3 버킷으로 백업할 수 있다.

OpenSearch Service 대상인 경우 스트리밍 데이터가 OpenSearch Service 클러스터로 전송되며, 선택적으로 S3 버킷에 백업할 수 있습니다.

Splunk 대상인 경우 스트리밍 데이터가 Splunk 클러스터로 전송되며, 동시에 선택적으로 S3 버킷에 백업할 수 있습니다.

Kinesis Data Streams vs Kinesis Data Firehose


Kinesis Data StreamsKinesis Data Firehose
확장성 있는 분산 이벤트 스트리밍 스토어Custom 코드 작성 (프로듀서, 컨수머)실시간 (~200 ms)확장성 관리 (shard splitting / merging)1 ~ 365일 동안 데이터 보관이 가능재처리 가능스트리밍 데이터를 S3 / ES / HTTP / 제3자서비스에 로드Fully managed준-실시간 (최소 단위의 버퍼 시간, 사이즈 존재)자동 스케일링데이터 저장이 기능이 없음재처리를 지원하지 않음
확장성 있는 분산 이벤트 스트리밍 스토어Custom 코드 작성 (프로듀서, 컨수머)실시간 (~200 ms)확장성 관리 (shard splitting / merging)1 ~ 365일 동안 데이터 보관이 가능재처리 가능스트리밍 데이터를 S3 / ES / HTTP / 제3자서비스에 로드Fully managed준-실시간 (최소 단위의 버퍼 시간, 사이즈 존재)자동 스케일링데이터 저장이 기능이 없음재처리를 지원하지 않음
확장성 있는 분산 이벤트 스트리밍 스토어Custom 코드 작성 (프로듀서, 컨수머)실시간 (~200 ms)확장성 관리 (shard splitting / merging)1 ~ 365일 동안 데이터 보관이 가능재처리 가능스트리밍 데이터를 S3 / ES / HTTP / 제3자서비스에 로드Fully managed준-실시간 (최소 단위의 버퍼 시간, 사이즈 존재)자동 스케일링데이터 저장이 기능이 없음재처리를 지원하지 않음
확장성 있는 분산 이벤트 스트리밍 스토어Custom 코드 작성 (프로듀서, 컨수머)실시간 (~200 ms)확장성 관리 (shard splitting / merging)1 ~ 365일 동안 데이터 보관이 가능재처리 가능스트리밍 데이터를 S3 / ES / HTTP / 제3자서비스에 로드Fully managed준-실시간 (최소 단위의 버퍼 시간, 사이즈 존재)자동 스케일링데이터 저장이 기능이 없음재처리를 지원하지 않음
확장성 있는 분산 이벤트 스트리밍 스토어Custom 코드 작성 (프로듀서, 컨수머)실시간 (~200 ms)확장성 관리 (shard splitting / merging)1 ~ 365일 동안 데이터 보관이 가능재처리 가능스트리밍 데이터를 S3 / ES / HTTP / 제3자서비스에 로드Fully managed준-실시간 (최소 단위의 버퍼 시간, 사이즈 존재)자동 스케일링데이터 저장이 기능이 없음재처리를 지원하지 않음

v

0개의 댓글