Kinesis Streams, Firehose 및 실시간 분석
Kinesis Data Streams로 스트리밍 데이터를 수집하고, Firehose로 S3 또는 Redshift에 전달하며, Managed Service for Apache Flink로 실시간 분석을 수행합니다.
Kinesis Streams, Firehose 및 실시간 분석은(는) CoddyKit의 무료 AWS Solutions Architect 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AWS Solutions Architect 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.
Kinesis 제품군 개요
Amazon Kinesis는 실시간 스트리밍 데이터를 수집, 처리 및 분석하기 위한 서비스 제품군입니다. 핵심 서비스는 다음과 같습니다. Kinesis Data Streams(지연 시간이 짧고 사용자 지정 처리가 가능함), Kinesis Data Firehose(S3/Redshift/OpenSearch로 완전 관리형 전달), Managed Service for Apache Flink(이전 명칭 Kinesis Data Analytics, 실시간 SQL 및 Flink 처리). 각 서비스는 스트리밍 파이프라인에서 서로 다른 역할을 담당합니다.
Kinesis Data Streams 아키텍처
Kinesis Data Stream은 샤드로 분할되는 내구성 있는 순서 보장 로그입니다. 각 샤드는 초당 1MB의 쓰기 처리량과 초당 2MB의 읽기 처리량을 제공합니다. 데이터 레코드는 기본적으로 24시간 동안 보존되며, 최대 7일 또는 365일까지 연장할 수 있습니다. 프로듀서는 스트림에 레코드를 쓰고, 소비자(Lambda, KCL 애플리케이션, Firehose 또는 Flink)는 하나 이상의 샤드에서 병렬로 읽습니다. 레코드는 한 번 기록되면 변경할 수 없습니다.
# Create a Kinesis Data Stream with 4 shards
aws kinesis create-stream \
--stream-name clickstream \
--shard-count 4
# Put a record into the stream
aws kinesis put-record \
--stream-name clickstream \
--partition-key 'user-123' \
--data 'eyJldmVudCI6ICJjbGljayJ9'샤드, 처리량 및 확장
샤드 수에 따라 스트림의 총 처리량이 결정됩니다. 샤드를 분할하면 처리량을 두 배로 늘릴 수 있고, 두 샤드를 병합하면 비용을 줄일 수 있습니다. Enhanced Fan-Out을 사용하면 등록된 각 소비자에게 다른 소비자와 독립적인 초당 2MB의 읽기 처리량을 제공할 수 있어, 여러 애플리케이션이 같은 스트림을 사용할 때 읽기 제한이 발생하지 않습니다. GetRecords.IteratorAgeMilliseconds를 모니터링하면 소비자 지연을 감지할 수 있습니다.
# Split shard to increase throughput
aws kinesis split-shard \
--stream-name clickstream \
--shard-to-split shardId-000000000001 \
--new-starting-hash-key 170141183460469231731687303715884105728
# Register an enhanced fan-out consumer
aws kinesis register-stream-consumer \
--stream-arn arn:aws:kinesis:us-east-1:123456789012:stream/clickstream \
--consumer-name analytics-appKinesis Data Firehose: 관리형 전달
Kinesis Data Firehose는 스트리밍 데이터를 캡처하고 변환한 뒤 S3, Amazon Redshift, Amazon OpenSearch Service, Splunk 및 HTTP 엔드포인트를 비롯한 대상으로 전달하는 완전 관리형 서비스입니다. 관리해야 할 샤드가 없으며 Firehose가 자동으로 확장됩니다. 버퍼 크기(1~128MB)와 버퍼 간격(60~900초)을 구성하면 Firehose는 두 한도 중 하나에 먼저 도달하는 즉시 데이터를 전달합니다.
# Create a Firehose delivery stream to S3
aws firehose create-delivery-stream \
--delivery-stream-name clickstream-to-s3 \
--s3-destination-configuration '{
"RoleARN": "arn:aws:iam::123456789012:role/FirehoseRole",
"BucketARN": "arn:aws:s3:::my-data-lake-123",
"Prefix": "landing/clickstream/year=!{timestamp:yyyy}/month=!{timestamp:MM}/",
"BufferingHints": {"SizeInMBs": 64, "IntervalInSeconds": 300},
"CompressionFormat": "GZIP"
}'Lambda를 사용한 Firehose 데이터 변환
Firehose는 각 레코드 배치마다 Lambda 함수를 호출하여 데이터를 전달하기 전에 스트리밍 중에 변환하거나 보강하거나 필터링할 수 있습니다. 일반적인 사용 사례로는 JSON을 Parquet으로 변환하기(Glue 스키마 사용), PII 필드 마스킹, 가치가 낮은 이벤트 삭제 등이 있습니다. 변환에 실패한 레코드는 선택적으로 별도의 S3 오류 접두사로 보내 재처리할 수 있으므로 데이터가 손실되지 않습니다.
# Lambda transform function signature for Firehose
def lambda_handler(event, context):
output = []
for record in event['records']:
import base64, json
payload = json.loads(base64.b64decode(record['data']))
# Drop events with no user_id
if not payload.get('user_id'):
output.append({'recordId': record['recordId'], 'result': 'Dropped', 'data': record['data']})
else:
output.append({'recordId': record['recordId'], 'result': 'Ok', 'data': record['data']})
return {'records': output}Managed Service for Apache Flink
Amazon Managed Service for Apache Flink(이전 명칭 Kinesis Data Analytics)는 완전 관리형 인프라에서 Apache Flink 애플리케이션을 실행합니다. 슬라이딩 윈도 집계, 이상 탐지, 이벤트 시퀀스 패턴 매칭, 스트리밍 데이터와 참조 테이블의 JOIN 등 상태를 유지하는 실시간 분석에 사용하세요. Flink 코드는 Java, Python 또는 Scala로 작성하며, Flink가 체크포인트와 정확히 한 번 처리되는 상태를 관리합니다.
# Flink SQL-style tumbling window (conceptual)
# Count page views per URL every 5 minutes
CREATE TABLE clickstream (
url STRING,
event_time TIMESTAMP(3),
WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND
) WITH ('connector' = 'kinesis', 'stream' = 'clickstream', ...);
SELECT
url,
COUNT(*) AS views,
TUMBLE_START(event_time, INTERVAL '5' MINUTE) AS window_start
FROM clickstream
GROUP BY url, TUMBLE(event_time, INTERVAL '5' MINUTE);Streams와 Firehose 중 선택하기
SAA-C03 시험에서는 선택 기준을 알아야 합니다. 1초 미만의 지연 시간, 여러 소비자의 동시 읽기, 보존 기간과 재생을 완전히 제어할 수 있는 사용자 지정 처리 로직이 필요하다면 Kinesis Data Streams를 사용하세요. 최소한의 코드와 선택적인 스트리밍 중 변환, 자동 확장을 활용하면서 S3, Redshift 또는 OpenSearch로 스트리밍 데이터를 안정적으로 전달하기만 하면 된다면, 지연 시간이 더 긴(60초 이상) Firehose를 사용하세요.
Kinesis와 SQS 비교: 대표적인 시험 선택 문제
일반적인 SAA-C03 문제에서는 Kinesis와 SQS 중 하나를 선택해야 합니다. 주요 차이점은 다음과 같습니다. Kinesis는 샤드 내 메시지 순서를 보장하고, 여러 소비자가 같은 데이터를 동시에 읽을 수 있으며, 재생을 위해 레코드를 보존합니다. SQS는 소비된 후 메시지를 삭제하므로 재생할 수 없고, FIFO 모드에서 엄격한 순서를 보장하며, 마이크로서비스를 분리하는 데 더 적합합니다. 시나리오에 실시간 분석이나 재생이 언급되면 Kinesis를 선택하세요.
Kinesis 프로듀서: SDK와 KPL
Kinesis Producer Library (KPL)는 애플리케이션에서 Kinesis Data Streams로 데이터를 기록하기 위한 고처리량 클라이언트입니다. KPL은 여러 개의 작은 레코드를 하나의 API 호출(최대 1MB)로 자동 집계하고 지수 백오프를 적용해 재시도합니다. 이를 통해 레코드당 PUT 비용을 크게 줄이고 샤드당 처리량을 높일 수 있습니다. 웹 클릭스트림, IoT 센서 또는 로그 파이프라인처럼 대량의 데이터를 생성하는 프로듀서에는 KPL을 사용하세요.
# Basic KPL usage (Java pseudocode, no backticks)
KinesisProducer producer = new KinesisProducer();
byte[] data = 'hello world'.getBytes();
ByteBuffer buf = ByteBuffer.wrap(data);
// addUserRecord handles aggregation and retry internally
ListenableFuture future = producer.addUserRecord('clickstream', 'partitionKey', buf);
Futures.addCallback(future, new FutureCallback() { ... });Firehose에서 Redshift로 전달하는 패턴
일반적인 아키텍처에서는 Firehose를 관리형 파이프라인으로 사용해 Kinesis 스트림이나 직접 연결된 프로듀서에서 Amazon Redshift로 데이터를 전달합니다. Firehose는 먼저 중간 S3 스테이징 버킷에 데이터를 기록한 다음 COPY 명령을 실행해 데이터를 Redshift에 로드합니다. 이는 스트리밍 데이터를 Redshift에 일괄 로드하는 가장 효율적인 방법입니다. 행마다 Redshift에 직접 삽입하면 행별 처리 오버헤드 때문에 매우 느려집니다.
# Firehose Redshift destination (CLI snippet)
--redshift-destination-configuration '{
"RoleARN": "arn:aws:iam::123456789012:role/FirehoseRole",
"ClusterJDBCURL": "jdbc:redshift://cluster.xyz.us-east-1.redshift.amazonaws.com:5439/sales",
"CopyCommand": {
"DataTableName": "clickevents",
"CopyOptions": "JSON 'auto'"
},
"Username": "firehose_user",
"Password": "{{resolve:secretsmanager:redshift-pw}}",
"S3Configuration": {
"RoleARN": "...",
"BucketARN": "arn:aws:s3:::firehose-staging"
}
}'CloudWatch를 사용한 Kinesis 모니터링
Kinesis에서 확인해야 할 주요 CloudWatch 지표는 다음과 같습니다. 프로듀서 처리량을 측정하는 IncomingBytes 및 IncomingRecords, 소비자 지연을 측정하는 GetRecords.IteratorAgeMilliseconds(값이 높으면 소비자가 처리 속도를 따라가지 못한다는 의미), 프로듀서가 샤드 한도에 도달했는지 감지하는 WriteProvisionedThroughputExceeded입니다. 반복자 수명과 프로비저닝된 처리량 초과에 CloudWatch 경보를 설정하면 Application Auto Scaling을 통해 샤드의 Auto Scaling을 트리거할 수 있습니다.
# CloudWatch alarm on high consumer lag
aws cloudwatch put-metric-alarm \
--alarm-name kinesis-high-lag \
--metric-name GetRecords.IteratorAgeMilliseconds \
--namespace AWS/Kinesis \
--dimensions Name=StreamName,Value=clickstream \
--statistic Maximum \
--period 60 \
--threshold 60000 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 3 \
--alarm-actions arn:aws:sns:us-east-1:123456789012:ops-alerts빠른 확인
이 레슨에서 다룬 AWS Solutions Architect (SAA-C03) 개념을 제대로 이해했는지 확인해 보세요.
레슨 요약
이 레슨에서는 Kinesis Data Streams가 여러 소비자와 재생 기능을 지원하는 내구성 있고 순서가 보장되는 샤드 기반 스트리밍을 제공한다는 점, Kinesis Data Firehose가 S3, Redshift 및 OpenSearch로 완전 관리형 무코드 전달을 제공한다는 점, Managed Service for Apache Flink가 스트림에서 상태를 유지하는 실시간 분석을 가능하게 한다는 점을 배웠습니다. 다음으로는 클라우드 마이그레이션 전략의 7가지 R을 살펴보겠습니다.
자주 묻는 질문
“Kinesis Streams, Firehose 및 실시간 분석” 강의는 무료인가요?
네 — “Kinesis Streams, Firehose 및 실시간 분석” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AWS Solutions Architect 강의 전체를 잠금 해제할 수 있습니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.
“Kinesis Streams, Firehose 및 실시간 분석”에서 뭘 배우나요?
Kinesis Data Streams로 스트리밍 데이터를 수집하고, Firehose로 S3 또는 Redshift에 전달하며, Managed Service for Apache Flink로 실시간 분석을 수행합니다. 브라우저에서 직접 실행하는 실습 코드로 AWS Solutions Architect을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AWS Solutions Architect을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AWS Solutions Architect은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“Kinesis Streams, Firehose 및 실시간 분석” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AWS Solutions Architect 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AWS Solutions Architect 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- S3에서 데이터 레이크 구축
- AWS Glue: ETL 및 데이터 카탈로그
- Amazon Athena: S3의 서버리스 SQL
- Kinesis Streams, Firehose 및 실시간 분석