# Kinesis

Apache Kafka를 대체해 실시간 스트림을 처리하는 서비스이다.

- **Kinesis Streams** : 적은 레이턴시로 스트림을 처리

- **Kinesis Analytics** : SQL로 실시간 분석을 수행

- **Kinesis Firehose** : 스트림을 S3 등에 저장

# 1. Kinesis Data Streams

![Image](https://upload.cafenono.com/image/slashpageHome/20240820/134229_gMCDrty9A8p6zpBFw5?q=80&s=1280x180&t=outside&f=webp)

- `ProvisionedThroughputException` 옵션이 없으면 샤드당 1MB/s나 1000 messages/s의 쓰기 속도를 가진다.

- 샤드당 2MB/s나 5 API/s의 읽기 속도를 가진다.

- 샤드 개수로 비용을 청구하고, 샤드를 통합하는 것도 가능하다.

- 기본 24시간, 최대 365일까지 데이터를 보관한다.

- 들어온 데이터는 지울 수 없다. (불변성)

### Streams Records

- **Data Blob** : Kinesis로 보내지는, 최대 1MB의 직렬화된 데이터

- **Record Key** : 레코드를 묶는 키값. 같은 key = 같은 샤드

- **Sequence Number** : 샤드에 들어온 순서대로 매긴 번호

### Kinesis Client Library (KCL)

Kinesis Streams을 처리하는 어플리케이션을 위한 라이브러리다. 여러 대의 KCL이 동시에 stream을 읽으면 서로 어디를 읽고 있는지 알 수가 없다. 그래서 KCL은 strem을 읽으면 DynamoDB에 checkpoint progress를 작성해 서로의 진행상황을 공유한다.

# 2. Kinesis Data Firehose

거의 실시간으로 스트림을 S3 등의 서비스에 저장하는 완전 관리형 서비스이다. 

- 최소 60초 혹은 최소 32MB가 될 때까지 기다린다.

- Lambda를 통해 데이터 변환을 지원한다. (CSV → JSON)

- 통과한 데이터의 양만큼 지불한다.

- Redshift, S3, ElasticSearch, Splunk에 데이터를 저장한다.

![Image](https://upload.cafenono.com/image/slashpageHome/20240820/134230_lF5tiVECM5pJpr9TcY?q=80&s=1280x180&t=outside&f=webp)

### Kinesis Data Streams vs Firehose

**Kinesis Data Streams**

- 데이터를 소비할 수 있게 변환함

- 직접 코드 작성, 실시간(~200ms)

- 확장 가능

- 하루에서 365일까지 데이터 보관

**Kinesis Data Firehose**

- 스트리밍 데이터를 받아 다른 스토리지에 저장

- 완전 관리, 거의 실시간

- 자동 확장

- 데이터 보관 X

# 3. Kinesis Data Analytics

SQL 문법을 이용해 실시간 데이터를 분석하는 완전 관리형 서비스이다. 자동 확장이 가능하고 시간 연속적인 분석이나 실시간 랭킹 등에 사용된다.

![Image](https://upload.cafenono.com/image/slashpageHome/20240820/134231_ezZ68JMOQvLSKUCCm0?q=80&s=1280x180&t=outside&f=webp)

For the site tree, see the [root Markdown](https://slashpage.com/kaonmir.md).
