Amazon Kinesis
Kinesis는 실시간 데이터 스트리밍 처리를 위한 관리형 서비스로, 다양한 유형의 데이터를 실시간으로 수집하고 처리하여 다른 서비스로 전달할 수 있다. 주요 Kinesis 서비스는 다음과 같다.
- Kinesis Data Streams: 데이터를 스트리밍하고 저장하여 실시간 처리를 가능하게 함.
- Kinesis Data Firehose: 데이터를 S3, Redshift, OpenSearch 등 지정된 저장소로 전송. 자동 스케일링 및 서버리스로 동작.
- Kinesis Data Analytics: SQL 또는 Apache Flink를 사용하여 스트리밍 데이터를 실시간 분석.
Kinesis Data Streams
- 샤드 구조: Kinesis Data Streams는 1개 이상의 샤드로 구성되며, 샤드는 데이터를 분할하여 스트림의 용량을 정의한다.
- 여러 생산자가 데이터를 스트림에 보낼 수 있으며, 소비자는 데이터를 처리한다.
- 소비자가 레코드는 수신할 때는 시퀀스 번호 (파티션 키와 함께 레코드가 샤드의 위치에 있었던 위치를 나타냄), 레코드(데이터 블롭으로 구성)는 받는다.
- 이때의 처리량을 공유할 때는 전체 소비자가 샤드당 2MB/sec을 받거나 팬아웃을 활성화한다면 2MB/sec를 받는다.
- 데이터 구성
- 파티션 키: 데이터가 특정 샤드에 할당되는 기준.
- 데이터 블롭: 최대 1MB 크기의 데이터.
- 속도 및 처리량
- 입력 처리량: 샤드당 1MB/sec 또는 1,000건의 레코드.
- 출력 처리량: 샤드당 2MB/sec.
- 데이터 보유 기간은 1~365일 설정 가능하며, 재처리 및 반복 사용이 가능하다.
- 데이터는 보유 기간 내에 삭제할 수 없다.
- AWS SDK, Kinesis Producer Library (KPL), Kinesis Agent 등을 통해 생산자가 데이터를 보낼 수 있고,
- 소비자는 Kinesis Client Library (KCL), Lambda, Firehose, Analytics 등으로 데이터를 수신한다.
Kinesis Data Streams - Capacity Modes
- Provisioned Mode
- 필요한 샤드 수를 수동으로 선택하여 설정하고, 샤드당 1MB/sec 입력과 2MB/sec 출력 처리량을 가진다.
- On-demand Mode
- 용량을 수동 설정할 필요 없이 자동으로 조정됩니다. 4MB/sec의 처리량과 지난 30일 동안의 피크에 맞춰 자동 스케일링이 이루어진다.
Kinesis Data Streams - Security
- 전송 중에는 HTTPS로, 저장 중에는 KMS로 암호화한다.
- IAM 정책을 통해 샤드 생성, 읽기, 접근을 제어할 수 있다.
- VPC 엔드포인트 지원으로 인터넷 없이 내부에서 Kinesis 접근 가능하다.
- CloudTrail로 API 호출 모니터링 가능하다
Kinesis - Producer
Kinesis Producer는 데이터를 Kinesis Data Streams로 전송하는 역할을 수행하며, 각 데이터 레코드를 구성하는 요소와 전송 방식을 이해하는 것이 중요하다.
데이터 레코드 구성 요소
- 시퀀스 번호: 파티션 키별로 고유하게 할당된 번호로, 각 레코드의 순서를 구별한다.
- 파티션 키: 레코드가 특정 샤드에 할당되는 기준이 되는 키입니다. 파티션 키는 해시 함수에 의해 특정 샤드로 변환되므로, 같은 파티션 키를 가진 데이터는 항상 같은 샤드에 저장된다.
- 데이터 블롭: 실제 데이터 내용으로 최대 크기는 1MB
생산자 종류
- AWS SDK: 기본적인 데이터를 전송하는 API로, 직접 구현하여 데이터를 Kinesis로 전송할 수 있다.
- Kinesis Producer Library (KPL): SDK 기반으로 배치 처리, 압축, 재시도 등의 고급 기능을 제공하여, 대량 데이터를 효율적으로 전송한다.
- Kinesis Agent: 로그 파일을 모니터링하여 Kinesis로 전송하는 자동화된 에이전트로, 서버에서 로그 파일을 수집할 때 유용하다.
전송 속도 및 처리량
- 쓰기 처리량: 샤드당 최대 1MB/sec 또는 1,000건의 레코드를 전송할 수 있다.
- PutRecord API: 개별 레코드를 Kinesis로 전송하며, PutRecords API로 여러 레코드를 한 번에 배치 전송할 수 있어 비용 절감과 처리량 증가에 도움이 된다.
효율적인 전송을 위한 팁
- 파티션 키 분산: 고르게 분산된 파티션 키를 사용하여 데이터가 특정 샤드에 집중되지 않도록 한다.
- 지수적 백오프(Exponential Backoff): 전송 실패 시 자동으로 재시도하는 방식으로, 일정 시간 대기 후 재전송하는 로직을 포함해 처리 안정성을 높인다.
- 샤드 스케일링: 특정 샤드에 과도한 데이터가 몰려 ProvisionedThroughputExceeded 오류가 발생할 경우 샤드를 분할하여 처리량을 늘릴 수 있다.
Kinesis Data Streams - Consumers
- 소비자는 Kinesis Data Streams로부터 데이터를 수신하여 처리한다.
- AWS Lambda, Kinesis Data Analytics, Kinesis Data Firehose 등을 활용할 수 있으며, 사용자 정의 소비자는 두 가지 모델이 있다.
- Shared (Classic) Fan-out Consumer
- Pull 모델로 동작하며, 모든 소비자가 샤드당 2MB/sec의 처리량을 공유한다.
- 예: 3개의 소비자가 있을 경우, 각 소비자는 샤드당 666KB/sec의 처리량을 가진ㄷ
- 최대 5개의 GetRecords API 호출 가능하며, 지연 시간은 약 200ms이다
- Enhanced Fan-out Consumer
- Push 모델로 작동하여, 각 소비자가 샤드당 2MB/sec의 처리량을 개별적으로 보장받는다.
- HTTP/2 방식으로 데이터를 푸시하며, 지연 시간은 약 70ms이다.
- 스트림당 최대 5개의 소비자를 허용한다
- AWS Lambda를 이용한 소비자
- 배치 처리: GetBatch() 함수로 레코드를 읽어 배치 단위로 처리한다. 배치 크기와 윈도우 시간을 설정할 수 있다.
- 오류 발생 시, 데이터가 만료되거나 성공할 때까지 재시도한다.
- 샤드당 최대 10개의 배치를 동시에 처리할 수 있다.
- Kinesis Client Library (KCL)
- KCL은 Kinesis Data Streams에서 데이터를 읽어오는 분산 애플리케이션을 쉽게 개발하도록 돕는 자바 라이브러리이다.
- 각 샤드는 KCL 인스턴스에서만 읽히며, KCL 인스턴스는 DynamoDB에 체크포인트를 기록하여 읽기 진행 상태를 추적한다.
- 버전
- KCL 1.x: Shared Fan-out만 지원.
- KCL 2.x: Shared 및 Enhanced Fan-out을 모두 지원.
Kinesis - 샤드 분할 및 병합
- 샤드 분할: 샤드를 두 개로 나누어 처리량을 높일 때 사용한다
- 샤드 병합: 트래픽이 적은 두 샤드를 하나로 결합하여 비용을 절감한다.
- 자동 스케일링 미지원: 용량 증감을 수동으로 조정해야 한다.
Kinesis Data Firehose
Kinesis Data Firehose는 완전 관리형 데이터 전송 서비스로, 다양한 데이터 저장소로 데이터를 자동으로 전달하며 실시간 근접 처리 성능을 제공한다.
- 특징
- 데이터는 S3, Redshift, OpenSearch 등 다양한 AWS 저장소로 전송 가능하다.
- 타사 파트너와의 통합(예: Datadog, Splunk, New Relic 등)도 가능하며, HTTP 엔드포인트로도 전송할 수 있다.
- 버퍼링 설정(1MB 이상 또는 0초~900초 사이)을 통해 데이터 일괄 전송이 가능하며, 실패한 데이터는 S3에 백업할 수 있다.
- Firehose를 통과하는 데이터에 대해서만 비용이 발생한다.
Kinesis Data Analytics
- SQL Application
- Kinesis Data Streams와 Firehose의 데이터를 SQL로 분석하여 실시간 처리를 지원한다.
- Amazon S3에서 보충 데이터를 가져올 수 있으며, 결과를 Data Streams나 Firehose로 전송할 수 있다.
- Apache Flink
- 자바, 스칼라, SQL을 사용하여 스트리밍 데이터를 분석한다.
- AWS에서 관리되는 Flink 클러스터에서 작동하며, 자동 스케일링과 체크포인트 백업을 제공한다.
SQS, SNS, Kinesis 비교
- SQS:
- 큐 모델로, 소비자가 데이터를 요청해서 가져오는 Pull 방식
- FIFO 대기열을 사용하여 순서 보장 가능하며, 지연 기능으로 메시지를 지연시킬 수 있다.
- SNS:
- Pub/Sub 모델로, 데이터를 여러 구독자에게 푸시한다.
- 주제를 구독한 모든 구독자에게 동시에 메시지를 전달하며, 팬아웃 패턴으로 SQS와 결합 가능하다.
- Kinesis:
- 실시간 스트리밍 서비스로, 대규모 데이터를 실시간으로 수집하고 처리ㅎ한다.
- Kinesis Data Streams는 샤드 분할 및 병합으로 수동 스케일링 가능 하며, Kinesis Data Firehose는 완전 관리형으로 자동 스케일링된다.
반응형
'AWS' 카테고리의 다른 글
AWS Section 21-2. AWS 서버리스: Lambda (2) | 2024.11.04 |
---|---|
AWS Section 21-1. AWS 서버리스: Lambda (0) | 2024.11.04 |
AWS Section 19-1. AWS 통합 및 메시징 : SQS, SNS 및 Kinesis (0) | 2024.11.04 |
AWS Section 18. CloudFormation (2) | 2024.11.04 |
AWS Section 16. ECS, ECR 및 Fargate - AWS의 도커 (0) | 2024.10.26 |