IT/AWS

[AWS] Kinesis Data Streams - Usage

물통꿀꿀이 2019. 2. 16. 22:29

이번 포스팅에서는 Kinesis 데이터 스트림이 어떻게 쓰이는지 실제 아키텍처 및 사례를 확인해 보려고 한다.


그림 1. Overview of Medical Device Use-Case – Real-Time Analytics 


그림 1을 확인해보면 Kinesis에서 제공하는 여러 기능을 확인 할 수 있다. 이 중에서 4번을 면밀히 살펴보면 Kinesis 데이터 스트림이 적용된 것을 확인 할 수 있다. 

(여기서 공급자는 Kinesis Analytics이고 소비자는 Lambda이다.)

간단한 Flow를 살펴보면 Analytics에서 파악한 Anomaly 점수를 데이터 스트림으로 보내고 비즈니스 로직을 처리하는 Lambda에서 점수를 바탕으로 경보를 발생하기 위해 SNS에게 데이터를 전달하는 구조이다. 즉, IoT sensor에서 발생하는 지속적인 정보가 Kinesis 데이터 스트림으로 흘러간 것이다.


그림 2. Data pipeline architecture using Kinesis Streams


다음으로 그림 2를 확인해보자. AWS 리소스가 많이 사용되어 조금 복잡해 보이지만 우리는 Kinesis 리소스의 앞과 뒤만 확인하면 된다.

그림 상에서는 공급자와 소비자 모두 EC2를 사용한다. https://read.acloud.guru/deep-dive-into-aws-kinesis-at-scale-2e131ffcfa08에서 확인해보면 알겠지만 Kinesis 양 옆에 KPL과 KCL 라이브러리를 사용해서 Kinesis의 스트림의 용량에 상관없이 최대한 처리 할 수 있도록 구성하였다. 

(특히 공급자에서 사용하는 EC2는 앞단에 Route 53, ELB, API Gateway를 붙여 놓으면서 데이터의 출처가 다양하다는 것을 또한 확인 할 수 있다.)


그림 3. Lambda Architecture Building Blocks on AWS


마지막으로 그림 3을 확인해보자. 앞단에 Speed Layer가 무엇인지 알아보면 간단히 데이터 실시간으로 전달해주는 계층을 말한다. 그렇기 때문에 Kinesis 스트림을 Speed Layer의 뒤에 붙여서 실시간 데이터를 처리 할 수 있도록 한다. 그런데 앞선 예시와 조금 다른 측면이 있다면 스트림을 처리하는 소비자가 Lambda 뿐만 아니라 EMR을 붙여서 스트림 데이터를 바로 실시간으로 처리 할 수 있도록 하였다.


간단히 3 가지 예시를 살펴보았지만 공통적으로 Kinesis 데이터 스트림은 실시간으로 들어오는 데이터를 받기 위해 사용된다. 그렇지만 Kinesis 데이터 스트림으로 데이터를 보내는 리소스와 Kinesis 데이터 스트림으로 부터 데이터를 받는 리소스의 종류는 데이터의 사용 목적 및 서비스의 역할에 따라 많이 다르다는 것을 Kinesis 데이터 스트림을 사용 할 때 고려해야 한다.


참조

https://d1.awsstatic.com/whitepapers/Serverless_Streaming_Architecture_Best_Practices.pdf

https://read.acloud.guru/deep-dive-into-aws-kinesis-at-scale-2e131ffcfa08

https://d1.awsstatic.com/whitepapers/lambda-architecure-on-for-batch-aws.pdf