Kinesis 스트리밍 테이블과 S3 전달
Kinesis 스트리밍 테이블과 S3 전달
Amazon Kinesis Data Streams에서 스트리밍 데이터를 두 가지 목적지 유형으로 전달(data delivery)할 수 있어요. 하나는 Apache Iceberg의 streaming tables(Amazon S3 Tables) 이고, 다른 하나는 general purpose Amazon S3 bucket이에요. 이 기능은 인프라를 전혀 관리할 필요가 없고, 몇 분 안에 전달을 시작할 수 있어요.
Kinesis Data Streams가 스트림에서 데이터를 읽고, 레코드를 버퍼링·집계한 뒤 내가 구성한 목적지로 전달해 줘요. 이 덕분에 스트림 데이터를 별도 ETL 없이 분석·저장 목적지로 바로 이어갈 수 있죠.
출처: 공식문서
본문
데이터 전달이 작동하는 방식
data delivery는 Kinesis data stream을 관리형 파이프라인을 통해 전달 목적지에 연결해요.
- On-Demand 모드의 Kinesis data stream에 데이터를 publish해요.
- 스트림에서
CreateChannel을 호출하고 목적지를 지정해요(Apache Iceberg의 streaming tables 또는 general purpose S3 bucket). - 전달이 스트림에서 읽고, 레코드를 버퍼링한 뒤 최적 크기의 파일로 집계해요.
- 집계된 데이터를 구성한 목적지에 씁니다.
전달 목적지 두 가지
- Apache Iceberg의 streaming tables — Kinesis data stream을 Amazon S3 Tables에 저장된 Apache Iceberg 테이블로 계속 전달해요. 스트림에 publish된 지 몇 분 안에 Amazon Athena, Amazon EMR, Amazon Managed Service for Apache Flink 등 Apache Iceberg를 지원하는 어떤 엔진으로도 쿼리할 수 있어요.
- general purpose S3 bucket — Kinesis data stream의 스트리밍 데이터를 S3 버킷에 직접 써요. 레코드는 변환 없이 원본 포맷 그대로 전달돼요.
흐름의 예
카드 트랜잭션(card-transactions) 유스케이스를 예로 들어 볼게요. 프로듀서가 AWS Glue Schema Registry의 스키마에 맞춰 레코드를 직렬화하고 Kinesis data stream에 써요. Kinesis Data Streams는 그 레코드를 Amazon S3 Tables의 Apache Iceberg 테이블로 전달하죠. S3 Tables에서 analytics integration을 켜면 테이블 메타데이터가 AWS Glue Data Catalog에도 등록되고(기본은 아님), 전달된 데이터와 메타데이터는 Amazon Athena, Amazon Redshift, Amazon EMR 같은 분석·AI 엔진이 쓸 수 있게 돼요.
general purpose S3 bucket 전달도 비슷하지만 두 가지가 달라요. AWS Glue Schema Registry가 필요 없고, 테이블 메타데이터를 Glue Data Catalog에 등록하지 않아요. 레코드는 원본 포맷 그대로 전달되고, Kinesis Data Streams가 레코드를 버퍼링·배치해 최적 크기 객체로 만들고, 내가 정의한 output key 템플릿의 S3 키 구조로 써요. 전달된 객체는 이후 배치 처리와 분석에 쓰이죠.
핵심 기능
- 서버리스 자동 확장(Serverless auto-scaling) — 스트림 병렬 처리량까지 자동으로 확장돼요. 프로비저닝할 컴퓨팅 리소스가 없어요.
- 샤드당 정확히 한 번 전달(Exactly-once delivery per shard) — 샤드 안에서 레코드가 중복 없이, 빠짐없이 정확히 한 번 목적지로 전달돼요.
- 실시간에 가까운 전달(Near real-time delivery) — 데이터 신선도(freshness)를 5
15분(300900초) 범위에서 설정할 수 있어요. - 자동 Parquet 변환(Automatic Parquet conversion) — Apache Iceberg streaming tables의 경우 레코드를 최적화된 Apache Parquet 형식으로 변환해 효율적인 분석 쿼리를 지원해요.
- 인라인 컴팩션(Inline compaction) — 분석 쿼리 성능을 위해 레코드를 최적 크기 파일로 집계해요.
- 암호화(Encryption) — 목적지에서 서버 측 암호화를 위해 고객 관리형 AWS KMS 키를 지원해요. AWS 관리 키(
aws/kinesis별칭)는 목적지 암호화에 지원되지 않아요. - 데드 레터 큐(Dead-letter queue) — 전달하지 못한 레코드의 실패 메타데이터(stream ARN, shard ID, sequence number, 오류 컨텍스트)를 S3 기반 데드 레터 큐에 써요.
- CloudWatch 지표와 로그 — byte 전달량, record 수, 데이터 신선도를 Amazon CloudWatch 지표로 모니터링하고, CloudWatch Logs로 전달 로깅을 켜면 배치 세부 사항·실패·오류 컨텍스트를 트러블슈팅에 쓸 수 있어요.
더 알아보기
- Amazon Kinesis Data Streams란 무엇인가요? — 서비스 개요
- Kinesis Data Streams 용어와 개념 — split/merge resharding과 샤드 관리
- Amazon Data Firehose란 무엇인가요? — 다른 스트림 전달 수단