Kinesis Data Analytics (x)
- Kinesis Data Analytics 종류
- SQL 애플리케이션용 Kinesis Data Analytics (SQL 애플리케이션)

- 중앙에 위치한다.
- Kinesis Data Streams와 Kinesis Data Firehose 데이터 소스에서 데이터를 읽는다.
- SQL 문에 적용해 실시간 분석을 처리할 수 있다.
- S3 버킷의 데이터를 참조해 참조 데이터를 조인할 수도 있다.
- 여러 대상에 데이터 전송 가능
- Kinesis Data Streams는 Kinesis Data Analytics의 실시간 쿼리로 스트림을 생성
-> 사례: EC2에서 실행하는 애플리케이션, Lambda로 스트리밍하는 데이터를 실시간으로 처리할 수 있다.
- Kinesis Data Firehose로 바로 전송할 수도 있다.
-> 사례: S3나 Redshift, OpenSearch, 기타 Firehose 대상에 전송된다.
- 세부 내용
- 데이터 소스: Kinesis Data Streams / Kinesis Data Firehose
- S3로 데이터를 강화할 수 있다.
- 완전 관리형 서비스이므로 서버를 프로비저닝하지 않아도됌
- 오토 스케일링 가능
- Kinesis Data Analytics에 전송된 데이터만큼 비용을 지불
- 출력: Kinesis Data Streams나 Kinesis Data Firehose에 데이터를 출력할 수 있다.
- 사용 사례: 시계열 분석 / 실시간 대시보드 / 실시간 지표
- Apache Flink용 Kinesis Data Analytics (스트리밍 애플리케이션)
- Kinesis Data Analytics에서 Apache Flink 사용 가능
- Apache Flink를 사용하면 자바, 스칼라, SQL로 애플리케이션을 작성하고, 스트리밍 데이터를 처리/분석할 수 있다.

- Flink는 코드로 작성해야하는 애플리케이션이다.
- Flink 애플리케이션을 Kinesis Data Analytics의 백그라운드에서 Flink 전용 클러스터에서 실행할 수 있음.
- Apache Flink을 사용해 두 개의 메인 데이터 소스인 Kinesis Data Streams나 Amazon MSK의 데이터를 읽을 수 있다.
- Apache Flink Kinesis Data Analytics
- AWS의 관리형 클러스터에서 Apache Flink 애플리케이션을 실행 가능
- Apache Flink는 표준 SQL보다 강력하기 때문에 고급 쿼리 능력이 필요하거나
- Kinesis Data Streams나 Amazon MSK 같은 서비스로부터 스트리밍 데이터를 읽는 능력이 필요할때 Apache Flink용 Kinesis Data Analytics를 사용한다.
- 이 서비스는 컴퓨팅 리소스를 자동으로 프로비저닝할 수 있다.
- 병렬 연산과 오토 스케일링을 할 수 있다.
- 체크포인트와 스냅샷으로 구현되는 애플리케이션 백업이 가능
- Apache Flink 프로그래밍 기능을 사용 가능.
- Apache Flink는 Kinesis Data Streams나 MSK 데이터는 읽지만 Kinesis Data Firehose의 데이터는 읽지 못한다.
- Kinesis Data Firehose에서 데이터를 읽고 실시간 분석하려면 SQL 애플리케이션 용 Kinesis Data Analytics를 사용해야 한다.
- ----------- SQL 애플리케이션 -----------
- (실습) SQL 애플리케이션(래거시) = SQL 애플리케이션용
Kinesis Data Analytics Studio와 Apache Flink 사용을 권장
그러나 Firehose를 통해 데이터를 읽으려면 SQL 애플리케이션을 사용해야함.
- (실습) 애플리케이션 이름을 정의한 다음 '실시간 분석'탭으로 가서 해당 애플리케이션의 SQL 코드를 작성할 수 있다.
- ----------- Apache Flink ------------
- (실습) 스트리밍 애플리케이션 = Apache Flink 애플리케이션을 생성하는 서비스목록
- (실습) 스튜디오: 데이터 분석을 위해 스트리밍 애플리케이션을 실행할 수 있는 노트북 생성
Amazon Managed Streaming for Apache Kafka(Amazon MSK)
- Apache Kafka용 Amazon 관리형 스트리밍 서비스 = Amazon MSK
Kafka는 Amazon Kinesis의 대안
두 서비스 모두 데이터를 스트리밍한다.
- MSK: 완전 관리형 Kafka 클러스터 서비스
- 그때그때 클러스터를 생성/업데이트/삭제한다.
- MSK는 클러스터 내 브로커 노드와 Zookeeper 브로커 노드를 생성 및 관리
- 고가용성을 위해 VPC의 클러스터를 최대 세 개의 다중 AZ 전역에 배포한다.
- 일반 Kafka 장애를 자동 복구하는 기능이 있다.
- EBS 볼륨에 데이터를 저장 가능
- MSK 서버리스
- MSK에서 Apache Kafka를 실행하지만 서버 프로비저닝이나 용량 관리가 필요 없다.
- MSK가 리소스를 자동으로 프로비저닝하고 컴퓨팅과 스토리지를 스케일링한다.
Apache Kafka

- Apache Kafka는 데이터를 스트리밍하는 방식
- Kafka 클러스터는 여러 브로커로 구성
- 데이터를 생산하는 생산자는 Kinesis, IoT, RDS 등의 데이터를 클러스터에 주입한다.
- Kafka 주제로 데이터를 전송하면 해당 데이터는 다른 브로커로 완전 복제된다.
- Kafka 주제는 실시간으로 데이터를 스트리밍하고 소비자는 데이터를 소비하기 위해 주제를 폴링한다.
- 소비자는 데이터로 원하는 대로 처리하거나,
EMR, S3, SageMaker, Kinesis, RDS 등의 대상으로 보낸다.
Kinesis Data Streams VS MSK

- Kinesis Data Streams
- 1MB의 메시지 크기 제한
- 샤드로 데이터를 스트리밍
- 용량 확장 = 샤드 분할, 용량 축소 = 샤드 병합
- TLS 전송 중 암호화 기능 O
- 저장 데이터 암호화 가능
- Amazon MSK
- 1MB는 기본값, 더 큰 메시지 보존을 위해 10MB 설정 가능
- 파티션으로 Kafka 주제 사용
- 파티션 추가로 주제 확장만 가능하다. (파티션 제거 불가능)
- 평문 또는 TLS 전송 중 암호화 기능 O
- 저장 데이터 암호화 가능
- 1년 이상 데이터를 보관할 수 있음.(EBS 스토리지 비용 지불 시)
Amazon MSK Consumers(소비자)

- MSK에 데이터를 생산하려면 Kafka 생산자를 생성해야 한다.
- MSK의 데이터를 소비하는 방법
- Apache Flink용 Kinesis Data Analytics를 사용해 Apache Flink 앱을 실행하고 MSK 클러스터의 데이터를 읽어 오면 된다.
- AWS Glue로 ETL 작업 스트리밍
Glue는 Apache Spark Streaming으로 구동
- MSK를 이벤트 소스로 이용하려면 Lambda 함수 사용
- 자체 Kafka 소비자를 생성해 원하는 플랫폼에서 실행 가능
EC2, ECS, EKS
빅 데이터 수집 파이프라인
- 이상적인 아키텍처
- 애플리케이션 수집 파이프라인이 완전히 서버리스
- AWS로 완전히 관리
- 데이터를 실시간으로 수집
- 실시간으로 수집된 데이터를 변환하고
- 변환된 데이터를 SQL을 이용해 쿼리
- 이 쿼리를 이용해 만드는 보고서는 S3에 저장한다.
- 그 데이터를 데이터 웨어하우스로 로드해서 대시보드를 제작
즉, 수집, 변환, 쿼리, 분석 등 일반적인 빅데이터 문제
구조

- 데이터 생산자: IoT 기기
AWS는 IoT Core로 IoT 디바이스를 관리할 수 있다.
- 이 IoT 기기들은 실시간으로 IoT Core에 데이터를 전송할 수 있다.
- IoT Core는 바로 Kinesis 데이터 스트림으로 전송한다.
- Kinesis를 위한 데이터 스트림은 kinesis 서비스로 빠르게 빅데이터를 실시간으로 파이프할 수 있도록 해준다.
- kinesis는 Kinesis Data Firehose와 소통하고, Firehose는 예를 들어 매 분 S3 버킷으로 데이터를 넣거나 오프로드 할 수 있도록 한다. -> 수집 버킷
== 완전한 파이프라인이 있고 많은 디바이스로부터 많은 데이터를 실시간으로 받고 S3 버킷으로 매 분 넣는다.
- 또한 Kinesis Data Firehose와 직접적으로 연결된 람다 함수를 이용해 데이터를 정리하거나 매우 빠르게 변환하는 것도 가능하다.
- 수집 버킷으로 무엇을 할 수 있을까?
- 수집 버킷으로 SQS 큐를 작동 시킬 수 있다.
- 선택적으로 SQS 큐가 Lambda를 작동하게 할 수 있다.
S3에서 직접적으로 람다를 호출할 수 있지만 SQS 큐로도 호출할 수 있음.
- 이 Lambda는 Athena SQL 쿼리를 작동 시킬 수 있고, 이 Athena 쿼리가 수집 버킷에서 데이터를 꺼내고 서버리스인 SQL 쿼리를 수행한다.
- 그리고 이 서버리스 쿼리의 출력은 보고(reporting) 버킷으로 들어갈 것이다.
== 이 데이터가 보고되고 있거나 정화 또는 분석되고 있을 것이다.
- 이것을 QuickSight를 통해서 바로 시각화 할 수 있다.
* QuickSight는 데이터를 S3 버킷으로 시각화 할 수 있는 방법
- 아니면 이 데이터를 분석을 위한 데이터 웨어하우스로 로드할 수도 있다.
Redshift도 QuickSight를 위한 엔드포인트의 역할을 할 수 있다.
위 파이프라인 정리
- IoT Core는 다양한 IoT 기기에서 데이터를 획득할 수 있게 도와준다.
- Kinesis는 실시간 데이터 연결에 매우 적합하다.
- Firehose는 S3로의 데이터를 거의 실시간에 가깝게 전송한다.(1분)
- 람다는 Firehose가 데이터 변환을 할 수 있도록 도와준다.
- S3는 SQS, SNS나 람다가 알림을 작동할 수 있도록 한다.
- 람다는 SQS에 구독할 수 있지만 S3를 람다로 연결할 수도 있다
- Athena는 서버리스 SQL 서비스로 Athena의 결과를 S3로 바로 다시 저장할 수 있다.
- 보고 버킷은 분석된 데이터를 담고 있고, 시각화를 위한 QuickSight나 추가적인 분석을 위한 Redshift 등 으로 보고 도구를 사용할 수 있다.