ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS Kinesis 살펴보기
    Cloud 2021. 7. 20. 07:45
    반응형

    AWS Kinesis는 '분산 이벤트 스트리밍 스토어'로 Apache Kafka, Google Pub/Sub, Azure Event Hubs 등과 비교되곤 합니다 [1].

    Kinesis는 그러한 '저장' 부분 외에도 스트리밍 데이터를 손쉽게 수집하고, 처리하고, 분석할 수 있도록 도와주는 모듈로 구성되어 있습니다. 그렇기에 애플리케이션 로그, 메트릭, IoT 센서 데이터 등의 실시간 데이터 수집에 이용되는데요. 

     

    각기 다른 기능을 담당하는 다음과 같은 4가지 세부 서비스로 구성되어 있습니다:

     

    • Kinesis Data Streams: 데이터 스트림 수집, 처리, 저장 담당
    • Kinesis Data Firehose: AWS 데이터 저장소로 데이터 스트림 로딩을 제공
    • Kinesis Data Analytics: SQL 또는 Apache Flink를 통한 데이터 스트림 분석 제공
    • Kinesis Video Streams: 비디오 스트림 수집, 처리, 저장 담당

     

    Kinesis Data Streams

    Kinesis Data Streams(KDS)은 데이터 파이프라인으로 프로듀서에서 생산된 데이터를 컨수머가 처리하기 전까지 aggregate, buffer, 저장합니다. 컨수머는 MapReduce와 같은 빅데이터 분석 애플리케이션이며, KDS는 다양한 종류의 바이너리 데이터를 입수할 수 있습니다:

     

    • 애플리케이션 로그
    • 주식 거래기록
    • 소셜미디어 피드
    • 금융 거래기록
    • 위치 추척 정보

     

    KDS는 Kinesis Video Streams과 유사하게 동작하며 프로듀서는 데이터를 KDS에 넣고, 그러한 데이터는 데이터 레코드에 저장됩니다. 스트림에 데이터를 어떻게 넣을지는 원천과 넣을 데이터 종류에 따라 정해집니다. 예로, 서버나 애플리케이션 로그를 처리하기 위해서는 리눅서 서버에서 실행할 수 있는 자바 기반 앱인 Kinesis Agent를 사용할 수 있습니다. 또한, 애플리케이션에서 바로 송신하기 위해서는 Kinesis Producer Library(KPL) 같은 것을 사용할 수 있습니다.  

     

    Kinesis Data Streams Flow - Image from author inspired by [2]

    KDS는 데이터를 데이터 레코드에 저장합니다. 데이터 레코드는 유니크 키인 시퀀스넘버와 샤드를 구분하기 위해 사용되는 파티션 키를 가집니다. Kinesis Video Streams는 시간-인덱스인 반면, KDS는 파티션키와 시퀀스넘버로 인덱싱됩니다. 또한 시퀀스넘버를 사용해서, 동일한 파티션키를 가진 데이터 레코드들 간에 순서를 보장할 수 있습니다. 

     

    기본적으로 쓰기는 최대 샤드/초 당 1 MB 또는 1000개의 메시지가 가능합니다. 그리고 읽기는 shared 상태라면 샤드/초 당 연결된 모든 컨수머를 합쳐서 2 MB가 가능합니다.  enhanced 상태라면 샤드/컨수머/초 당 2 MB가 가능하며 각 샤드는 최대 초 당 5개까지의 트랜잭션을 제공한다고 합니다 [3]. 

     

    특징

    • 비용은 사용 설정된 샤드 당  비용 + PUT 데이터 사이즈에 따라서 결정됨 [4]
    • 기본적으로 샤드는 200개 (일부 지역 500개)까지이지만 추가 요청을 통해 제한갯수를 올릴 수 있음 [3]
    • 데이터 보관 주기(리텐션)는 1 ~ 365일 설정 가능함
    • 데이터 재처리가 가능함
    • 데이터가 일단 적재되고 나서는, 변경이 불가능 (immutability)
    • 파티션이 같은 데이터는 같은 샤드로 입수됨
    • 프로듀서: AWS SDK, Kinesis Producer Libarary (KPL), Kinesis Agent
    • 컨수머
      • 직접 작성: Kinesis Client Library (KCL), AWS SDK
      • Managed: AWS Lambda, Kinesis Data Firehose, Kinesis Data Analytics

     

    Kinesis Data Firehose

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

     

    많이 사용되는 한 가지 형태로, 리텐션이 제한이 있는 Kinesis Data Streams을 원천으로 삼아, KDF는 S3나 다른 영속적인 저장소에 데이터를 저장할 수 있습니다.

     

    Kinesis Data Firehose - Image from author inspired by [2]

     

    특징

    • Fully managed 서비스, 서버리스이고 자동 스케일링으로 운영 및 확장이 필요없음
    • 사용한 데이터 사이즈에 따라 비용이 부과됨
    • Near real-time
      • 최소 60초 시간 단위 또는 32 MB 단위가 한 번의 write의 threshold
    • 다양한 데이터 포맷, 가공, 압축방식 제공
    • AWS Lambda를 사용한 custom 가공 처리 기능 제공
    • write 실패한 것만 또는 모든 raw 데이터를 S3에 백업할 수 있음 (목적지에 송신되는 것과 동시에 백업 S3에 적재)

     

    Kinesis Data Streams VS Kinesis Data Firehose

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

     

     

    Reference

    [1] https://blog.scottlogic.com/2018/04/17/comparing-big-data-messaging.html

    [2] https://www.udemy.com/course/aws-certified-solutions-architect-associate-saa-c02/

    [3] https://docs.aws.amazon.com/streams/latest/dev/service-sizes-and-limits.html

    [4] https://aws.amazon.com/kinesis/data-streams/pricing/

    [5] https://docs.aws.amazon.com/firehose/latest/dev/limits.html

     

     

     

    반응형
Kaden Sungbin Cho