Amazon Kinesis Streams를 사용하면 특수 요구에 맞게 스트리밍 데이터를 처리 또는 분석하는 커스텀 애플리케이션을 구축할 수 있습니다. 수십만 개의 데이터 생산자를 구성하여 Amazon Kinesis 스트림으로 계속 데이터를 보낼 수 있습니다. 예를 들어 웹사이트 클릭스트림, 애플리케이션 로그, 소셜 미디어 피드 등에서 가져온 데이터가 포함됩니다. 그러면 1초도 안 걸려 Amazon Kinesis 애플리케이션에서 스트림의 해당 데이터를 읽고 처리할 수 있습니다.

다음 아키텍처 다이어그램에서는 Amazon Kinesis Streams가 빅 데이터 솔루션의 게이트웨이로 사용되고 있습니다. 다양한 소스에서 데이터가 Amazon Kinesis 스트림에 추가되고, 스트림의 데이터가 다양한 Amazon Kinesis 애플리케이션에서 사용됩니다. 이 예에서는 한 애플리케이션(노란색)이 스트리밍 데이터에 대해 실시간 대시보드를 실행하고 있습니다. 다른 애플리케이션(빨간색)에서는 간단한 집계를 수행하고 처리한 데이터를 Amazon S3로 내보냅니다. Amazon S3의 데이터는 추가적인 처리 과정을 거친 후 복잡한 분석을 위해 Amazon Redshift에 저장됩니다. 세 번째 애플리케이션(녹색)은 Amazon S3로 원시 데이터를 내보내는데, 이 데이터는 좀 더 경제적인 장기 저장을 위해 Amazon Glacier에 보관됩니다. 이러한 세 가지 유형의 데이터 처리 파이프라인은 모두 동시에 병렬로 발생합니다. Amazon Kinesis Streams는 솔루션에 필요한 데이터 스트림 소비자 수에 맞춰 성능 저하 없이 사용할 수 있도록 해줍니다.

kinesis-architecture-crop

샤드는 Amazon Kinesis 스트림의 기본 처리 단위입니다. 샤드 1개는 초당 1MB의 데이터 입력 및 2MB의 데이터 출력 용량을 제공하며 샤드 1개는 초당 최대 1,000개의 PUT 레코드를 지원합니다. 스트림을 생성할 때 필요한 샤드 수를 지정하게 됩니다. 예를 들어, 샤드가 2개 있는 스트림을 생성할 수 있습니다. 이 스트림은 초당 2MB의 데이터 입력 및 초당 4MB의 데이터 출력을 처리할 수 있으며 초당 최대 2,000개의 PUT 레코드를 허용합니다. Amazon Kinesis Streams에서 샤드 수준 지표를 모니터링하고, 변화하는 데이터 스트림에 따라 스트림을 리샤딩함으로써 스트림에서 샤드를 동적으로 추가 또는 제거할 수 있습니다.

레코드는 Amazon Kinesis 스트림에 저장되는 데이터의 단위입니다. 레코드는 시퀀스 번호, 파티션 키, 데이터 Blob으로 구성됩니다. 데이터 Blob은 사용자의 데이터 생산자가 스트림에 추가한 대상 데이터입니다. 데이터 Blob의 최대 크기(Base64로 디코딩한 후 데이터 페이로드)는 1메가바이트(MB)입니다.

파티션 키는 데이터 레코드를 스트림의 다른 샤드로 분리하고 라우팅하는 데 사용됩니다. 파티션 키는 Amazon Kinesis로 데이터를 추가하는 동안 데이터 생산자에 의해 지정됩니다. 예를 들어 2개의 샤드가 있는 Amazon Kinesis 스트림이 있다고 가정해 보겠습니다(Shard 1과 Shard 2). 파티션 키 2개(키 A와 키 B)를 사용하도록 데이터 생산자를 구성하여 키 A가 있는 모든 데이터 레코드는 샤드 1에 추가하고 키 B가 있는 모든 데이터 레코드는 샤드 2에 추가할 수 있습니다.

시퀀스 번호는 각 데이터 레코드에 대한 고유 식별자입니다. Amazon Kinesis Streams에 데이터를 추가하기 위해 데이터 생산자가 PutRecord 또는 PutRecords  API를 호출할 때 Amazon Kinesis Streams에서 시퀀스 번호를 할당합니다. 동일한 파티션 키에 대한 시퀀스 번호는 일반적으로 시간이 지남에 따라 증가합니다. PutRecord 또는 PutRecords 요청 사이의 시간 간격이 길어질수록 시퀀스 번호도 커집니다. 


Amazon Web Services에 가입하고 다음을 수행하면 Amazon Kinesis Streams를 사용할 수 있습니다.

  • Amazon Kinesis Management Console이나 Amazon Kinesis CreateStream API를 사용하여 Amazon Kinesis 스트림을 생성합니다.
  • Amazon Kinesis 스트림에 지속적으로 데이터를 추가하도록 데이터 생산자를 구성합니다.
  • Amazon Kinesis 스트림의 데이터를 읽고 처리하도록 Amazon Kinesis 애플리케이션을 구축합니다.

데이터 생산자는 Amazon Kinesis Streams API, Amazon Kinesis 생산자 라이브러리(KPL) 또는 Amazon Kinesis 에이전트를 사용해 Amazon Kinesis Streams에 데이터를 추가할 수 있습니다. 

 

Amazon Kinesis Streams는 Amazon Kinesis Streams에 데이터를 추가할 수 있도록 PutRecord PutRecords 라는 두 가지 API를 제공합니다. PutRecord에서는 API 호출 시 단일 데이터 레코드를 사용할 수 있고 PutRecords에서는 API 호출 시 여러 데이터 레코드를 사용할 수 있습니다.

Amazon Kinesis 생산자 라이브러리(KPL)는 Amazon Kinesis 스트림에 데이터를 추가하도록 지원하는 사용이 간편하고 쉽게 구성 가능한 라이브러리입니다. Amazon Kinesis 생산자 라이브러리(KPL)는 간편한 비동기식의 안정적인 인터페이스를 제공하여 최소한의 고객 리소스로 높은 생산자 처리량을 신속하게 달성할 수 있습니다.

Amazon Kinesis 에이전트는 사전 구축된 Java 애플리케이션으로서, 데이터를 수집하여 Amazon Kinesis 스트림으로 전송하는 간편한 방법을 제공합니다. 에이전트는 웹 서버, 로그 서버, 데이터베이스 서버 등과 같은 Linux 기반 서버 환경에 설치할 수 있습니다. 에이전트에서는 특정 파일을 모니터링하고 데이터를 스트림으로 지속적으로 전송합니다. 


Amazon Kinesis 애플리케이션은 Amazon Kinesis 스트림의 데이터를 읽고 처리하는 데이터 소비자입니다. Amazon Kinesis API 또는 Amazon Kinesis 클라이언트 라이브러리(KCL)를 사용하여 Amazon Kinesis 애플리케이션을 구축할 수 있습니다.

Amazon Kinesis 클라이언트 라이브러리(KCL)는 Amazon Kinesis 스트림의 데이터를 읽고 처리하는 Amazon Kinesis 애플리케이션을 손쉽게 구축할 수 있도록 지원하는 사전 구축 라이브러리입니다. KCL은 스트림 볼륨 변화에 따른 조정, 스트리밍 데이터 로드 밸런싱, 분산 서비스 조직화 및 내결함성 있는 데이터 처리와 같은 복잡한 문제를 처리합니다. KCL을 사용하면 Amazon Kinesis 애플리케이션을 개발하는 동안 비즈니스 로직에 집중할 수 있습니다.

Amazon Kinesis 커넥터 라이브러리는 Amazon Kinesis를 다른 AWS 서비스 및 타사 도구와 간편하게 통합할 수 있도록 지원하는 사전 구축 라이브러리입니다. Amazon Kinesis 커넥터 라이브러리를 사용하려면 Amazon Kinesis 클라이언트 라이브러리(KCL)가 필요합니다. 현재 라이브러리 버전은 Amazon DynamoDB, Amazon Redshift, Amazon S3, Elasticsearch에 대한 커넥터를 제공합니다. 이 라이브러리에는 각 유형별 샘플 커넥터와 샘플 실행을 위한 Apache Ant 빌드 파일도 포함되어 있습니다.

Amazon Kinesis Storm Spout는 Amazon Kinesis Streams를 Apache Storm과 손쉽게 통합할 수 있도록 지원하는 사전 구축된 라이브러리입니다. 현재 Amazon Kinesis Storm Spout 버전은 Amazon Kinesis 스트림에서 데이터를 가져와 튜플로 내보냅니다. Spout를 Storm 토폴로지에 추가하여 Amazon Kinesis Streams를 안정적이고 확장 가능한 스트림 캡처, 스토리지, 리플레이 서비스로 활용할 수 있습니다.


Amazon Kinesis Streams는 Amazon CloudWatch와 통합되므로 Amazon Kinesis Streams와 해당 스트림 내 샤드에 대한 CloudWatch 지표를 수집, 확인 및 분석할 수 있습니다. Amazon Kinesis Streams 지표에 대한 자세한 내용은 Monitoring Amazon Kinesis with Amazon CloudWatch를 참조하십시오.

Amazon Kinesis Streams는 AWS 서비스 및 리소스에 대한 사용자 액세스를 안전하게 제어할 수 있도록 지원하는 서비스인 AWS Identity and Access Management (IAM)와 통합됩니다. 예를 들어 특정 사용자 또는 그룹만 Amazon Kinesis 스트림에 데이터를 추가할 수 있도록 허용하는 정책을 생성할 수 있습니다. Amazon Kinesis 스트림에 대한 액세스 관리 및 제어에 대한 자세한 내용은 Controlling Access to Amazon Kinesis Resources using IAM을 참조하십시오.

Amazon Kinesis Streams는 계정에 대한 AWS API 호출을 기록하고 로그 파일을 사용자에게 전달하는 서비스인 Amazon CloudTrail과 통합됩니다. API 호출 로깅 및 지원되는 Amazon Kinesis API 목록에 대한 자세한 내용은 Logging Amazon Kinesis API calls Using AWS CloudTrail을 참조하십시오.

VPC 엔드포인트를 생성하면 Amazon Virtual Private Cloud(VPC)에서 Kinesis Streams API에 비공개로 액세스할 수 있습니다. VPC 엔드포인트를 사용하면 인터넷 게이트웨이, NAT 게이트웨이 또는 VPN 연결을 사용할 필요 없이 AWS 네트워크에서 VPC와 Kinesis Streams 간 라우팅을 처리합니다. Kinesis Streams가 사용하는 최신 세대 VPC 엔드포인트는 AWS PrivateLink에서 제공합니다. 이는 Elastic Network Interface(ENI)를 사용하는 AWS 서비스와 VPC 내 프라이빗 IP 간에 프라이빗 연결을 지원하는 기술입니다. 자세한 내용은 AWS PrivateLink 설명서를 참조하십시오.

서버 측 암호화 또는 클라이언트 측 암호화를 사용하여 Kinesis Stream을 배치 한 데이터를 암호화할 수 있습니다. 서버 측 암호화는 스트림에서 데이터를 추가하고 가져옴에 따라 자동으로 암호화하고 복호화하는 완전관리형 기능입니다. 또는 데이터를 스트림에 배치하기 전에클라이언트 측에서 데이터를 암호화할 수 있습니다. 자세한 내용은 Kinesis Streams FAQ의 보안 단원을 참조하십시오.

Amazon Kinesis는 간편한 리소스 및 비용 관리를 위해 사용자가 Amazon Kinesis Streams에 태그를 지정할 수 있도록 허용합니다. 태그는 키-값 페어로 표현되는 사용자 정의 레이블로 AWS 리소스를 정리하는 데 도움이 됩니다. 예를 들어 비용 센터별로 Amazon Kinesis Streams에 태그를 지정하면 비용 센터별로 카테고리를 나누어 Amazon Kinesis 비용을 추적할 수 있습니다. 자세한 내용은 Tagging Your Amazon Kinesis Streams를 참조하십시오.