AWS Managed Flink + Kinesis DataStream 실시간 데이터 처리 시스템 개요
1. 개요
최근 데이터 처리 환경은 “실시간”이라는 키워드가 핵심입니다.
대용량 이벤트 스트림을 빠르게 수집하고, 실시간으로 분석·가공한 뒤 다양한 시스템에 전달해야 하는 요구가 있어서
AWS에서 제공되고 있는 Amazon Kinesis DataStream와 **Amazon Managed Service for Apache Flink(이하 Managed Flink)**를 활용해봤습니다.
이번 글에서는 이 두 서비스를 활용해 실시간 데이터 파이프라인을 구축하는 기본 개념과 설계 포인트를 정리해봅니다.
2. 서비스 개요
2.1 Amazon Kinesis
Kinesis는 AWS의 완전관리형 스트리밍 데이터 서비스입니다. (Kafka 와 유사하다고 생각하시면 됩니다.)
이 중 **Kinesis Data Streams(KDS)**를 사용하면 초당 수백 MB~GB급 이벤트를 안정적으로 수집·버퍼링할 수 있습니다.
특징
- 샤드(Shard) 단위로 처리량 확장 가능 -> 파티션 과 유사
- 순서 보장 및 재처리 지원
- 초당 수천 TPS 가능
- SDK, Firehose, CLI 등 다양한 연동 방식
2.2 Amazon Managed Flink
Apache Flink를 완전관리형으로 제공하는 서비스입니다.
Managed Flink를 사용하면 클러스터 관리나 배포 인프라 고민 없이, Flink 애플리케이션 개발에 집중할 수 있습니다.
단, 기본 Flink와 다르게 조정할 수 없는 Configuration 들이 있으니 공식문서를 참조해야 합니다.
특징
- Flink 버전 업그레이드 및 인프라 관리 자동화
- Kinesis, S3, DynamoDB 등 AWS 서비스와 Native 연동
- Checkpoint/Savepoint를 통한 상태(State) 복구 지원
- Scaling 자동화(Parallelism 조정)
3. 시스템 아키텍처 개요
- Producer: 실시간 Event 수집 Platform
- Kinesis Data Streams: 실시간 데이터 Queue
- Managed Flink: 실시간 데이터 처리(Enrichment, Filtering, Aggregation)
- Sink: 결과 저장(S3)
4. 구현 시 주요 고려사항
4.1 데이터 모델 & 직렬화
- Flink와 Kinesis 간 전송 데이터는 기본사용은 kryo사용(reflect방식)으로 성능이 떨어지기 때문에 추후 스키마 진화를 생각하면 Avro, Protobuf 등 직렬화 포맷 선택하는것이 유리하다.
4.2 상태 관리(State Management)
- Flink는 Keyed State와 Operator State를 제공
- 상태 크기가 커질수록 Checkpoint 주기와 저장소 성능이 중요하다.
- AWS에서는 기본적으로 S3에 Checkpoint/Savepoint 저장하며 사용자는 접근이 불가능하다.
4.3 Checkpoint / Savepoint 전략
- Checkpoint: 장애 시 자동 복구
- Savepoint: 버전 배포·롤백 시 수동 복구
- 체크포인트 주기는 1분~5분 권장, 처리량과 지연 시간에 따라 조정
4.4 Source/Sink Connector
- Source: KinesisStreamsSource 또는 Flink Kinesis Connector
- Sink: S3 로 기본사용
4.5 확장성(Scaling)
- Kinesis는 샤드 수로 확장
- Flink는 parallelism 조정
- 병목 지점(Shard → Flink 병렬도) 일치 여부 체크 필요
- Parallelism과 KPU가 자동으로 계산되는데 4.2의 상태관리와 연관되어 재기동시 backpressure , 지연이 발생하지 않도록 처리시간 + 복원시간을 고려해야 한다.
5. 운영 팁
- CloudWatch + Managed Flink Metrics로 레이턴시, 백프레셔(backpressure) 모니터링
- Kinesis 샤드 모니터링 → 샤드 split/merge 자동화 스크립트 준비
- Flink 애플리케이션 버전 관리 → Git + CI/CD (CodePipeline, CodeBuild) 연동 , Flink재기동은 자동보다는 수동을 추천
- Data retention: Kinesis는 최대 7일, 그 이상은 S3에 Raw Data 저장
- 배포 전 로컬 환경에서 Flink MiniCluster로 테스트
- Flink 내 ProecssFunction에 대해서는 Harness를 이용해서 최대한 Test Code를 작성해둔다.
6. 간단한 예제 플로우
- Source: Kinesis에서 JSON 데이터 읽기
- KeyBy: UserId 단위 처리
- ProcessFunction: 룰 매핑, 데이터 보강
- Sink: S3 저장
DataStream<Event> source = env
.fromSource(kinesisSource, WatermarkStrategy.noWatermarks(), "Kinesis Source")
.map(json -> parseJson(json));
source
.keyBy(Event::getUserId)
.process(new CustomEnrichmentFunction())
.addSink(s3Sink);
7. 결론
AWS Managed Flink + Kinesis 조합은 실시간 데이터 분석 파이프라인을 빠르고 안정적으로 구축할 수 있는 강력한 도구입니다.
인프라 운영 부담을 줄이고, 비즈니스 로직에 집중할 수 있다는 점이 가장 큰 장점입니다.
다만, 체크포인트 전략, 상태 크기 관리, Kinesis 샤드 수 조정 등 운영 노하우가 중요하니, 충분히 검증 / 모니터링을 후 본격 도입하는 것을 추천드립니다.
'Software Architecture' 카테고리의 다른 글
Spring Application development guide that complies with the OAuth2 standard (0) | 2024.12.19 |
---|---|
AWS 데이터베이스 비용비교 (DynamoDB vs RDS) (0) | 2024.12.19 |
Spring 기반의 Layer별 테스트케이스 작성 가이드 (0) | 2024.04.03 |
(콘웨이법칙)커뮤니케이션 구조가 소프트웨어의 구조를 결정한다. (1) | 2023.04.13 |
OAuth 2.0 Flow (0) | 2023.03.03 |