AWS認定Big Data勉強記 - 8: Amazon Kinesis

こんにちは、えいりんぐーです

今回は Amazon Kinesis についてまとめます。

一口に Kinesis といっても、 Data Streams, Data Firehose, Data Analytics など特性の異なるサービスがあるのでそれぞれ別記事にしたいと思います。
ひとまずここでは、それぞれの概要と参考記事を集めます。

#### 参考資料

 - [Black Beltオンラインセミナー資料](https://d1.awsstatic.com/webinars/jp/pdf/services/20180110_AWS-BlackBelt-Kinesis.pdf)
 - 公式ドキュメント
    - Streams
       - [開発者ガイド](https://docs.aws.amazon.com/ja_jp/streams/latest/dev/introduction.html)
       - [よくある質問](https://aws.amazon.com/jp/kinesis/data-streams/faqs/)
    - Firehose
       - [開発者ガイド](https://docs.aws.amazon.com/ja_jp/firehose/latest/dev/what-is-this-service.html)
       - [よくある質問](https://aws.amazon.com/jp/kinesis/data-firehose/faqs/?nc1=h_ls)
    - Analytics
       - [開発者ガイド、英語のみ](https://aws.amazon.com/jp/kinesis/data-analytics/resources/)
       - [よくある質問](https://aws.amazon.com/jp/kinesis/data-analytics/faqs/)
 - ブログ
    - [Amazon Kinesis Data Streams および AWS Lambda を使用して、Amazon RDS for PostgreSQL の変更をストリーミングする](https://aws.amazon.com/jp/blogs/news/stream-changes-from-amazon-rds-for-postgresql-using-amazon-kinesis-data-streams-and-aws-lambda/)
 - YouTube
    - [re:Invent 2018](https://www.youtube.com/watch?v=jKPlGznbfZ0)
    - [Streaming ETL for Data Lakes using Amazon Kinesis Firehose - 2017 AWS Online Tech Talks](https://www.youtube.com/watch?v=0AGNcZfYkzw)
    - [Real-Time Log Analytics using Amazon Kinesis and Amazon Elasticsearch Service](https://www.youtube.com/watch?v=NfkGpjrdy_Y)
 - その他
    - [[AWS]kinesisまとめ](https://qiita.com/yShig/items/500d4139efed91bc432d)
        - こちらの記事も良くまとまっています。

#### Amazon Kinesis Data Streams

###### Q: Amazon Kinesis Data Streams とは何ですか?

Amazon Kinesis Data Streams を使用すると、特定のニーズに合わせてストリーミングデータを処理、分析するカスタムアプリケーションを構築できます。クリックストリーム、アプリケーションログ、ソーシャルメディアなどのさまざまなタイプのデータを何十万ものソースから Amazon Kinesis データストリームに連続して追加できます。ほんの数秒後には、Amazon Kinesis アプリケーションで、ストリームからデータを読み取って処理できます。

###### 概要
 - データ種類や処理に応じてストリームを作成。
    - ストリームには1つ以上のシャード。
    - 保存されるデータをデータレコードと呼ぶ。
       - 1データレコードのサイズは1MBまで
    - 保存期間はデフォルトの24時間から7日
    - 送信側キャパシティは秒あたりシャードあたり1MBまたは1,000PUT
    - 処理側キャパシティは秒あたりシャードあたり2MBまたは5回のリードトランザクション
 - パーティションキーでシャードへ分散。
    - レコードにはシーケンス番号をアサインする。
    - シーケンス番号でアクセスできる。
 - Kinesis Agent
    - Kinesisにデータを送るOSSのJavaアプリ。
        - モニタするファイルパターンや送信先を指定できる。
        - ファイルのローテート処理や失敗時の再試行を管理できる。
        - フォーマット変換やログパースなどの前処理も提供。
        - Streams と Firehose への送信が可能
 - KPL
    - Kinesisにデータを送るOSS。
        - 複数のデータを1レコードにするAggregationや複数レコードをバッファリングするCollectionが可能。Fluent pluginもある
 - KDG
    - テストデータを送信できる。HTML/JavaScriptのOSS。
 - KCL
    - EC2インスタンスなどにデプロイして利用。
    - Record Processor Factory, Record Processor (シャードから取り出したデータを処理するプロセッサの単位), Worker (個々のアプリケーションインスタンスとマッピングする処理単位)といったコンポーネントからなる。


#### Amazon Kinesis Data Firehose
ストリームデータをS3, Redshift, ESへ配信する。簡単。バッチ処理・圧縮・暗号化が行える。

###### Q: Amazon Kinesis Data Firehose とは何ですか?

Amazon Kinesis Data Firehose は、ストリーミングデータをデータストアや分析ツールにロードする最も簡単な方法です。ストリーミングデータをキャプチャして変換し、Amazon S3、Amazon Redshift、Amazon Elasticsearch Service、Splunk にロードして、現在お使いのビジネスインテリジェンスツールやダッシュボードでほぼリアルタイムに分析できます。フルマネージドサービスのため、データスループットに応じて自動的にスケールされ、継続的な管理は不要です。ロード前にデータのバッチ処理、圧縮処理、暗号化が行われるため、送信先でのストレージ量を最小化し、セキュリティを強化できます。

###### 概要
 - 送信側からはエンドポイントで接続する。
 - 配信先に応じて配信ストリームを作成する。
 - シャード作成やパーティションキーの指定は不要。
 - データレコードの最大サイズは1MB。
 - オートスケールする。
 - StreamsからFirehoseに直接データを送れる。

#### Amazon Kinesis Data Analytics

###### Q: Amazon Kinesis Data Analytics とは何ですか?

Amazon Kinesis Data Analytics は、ストリーミングデータの分析、実用的なインサイトの取得、ビジネスやお客様のニーズへのリアルタイムでの対応を最も簡単に行えるサービスです。Amazon Kinesis Data Analytics を利用すると、ストリーミングアプリケーションを構築し、管理し、AWS のサービスと統合する作業がシンプルになります。一般的な処理関数のための組み込みのテンプレートや演算子を利用し、SQL クエリと高度な Java アプリケーションを簡単に構築し、あらゆる規模のデータを整理、変換、集計、分析できます。

###### 概要
 - 分析単位でアプリケーションを作成する。
    - 入出力のストリーミングソース・デスティネーションを設定。
 - クエリの前処理としてLambdaを設定可能。
    - Lambdaはデータレコードの補完や返還に利用できる。
        - Ok: 前処理成功。
        - Dropped: 意図的なレコードの排除。
        - ProcessingFailed: 前処理失敗。エラーストリームへ流れる。
 - SQLを記述。
 - 1行の最大サイズは50KB。
 - 参照ソースの最大サイズは1GB
    - 外部参照テーブルとはジョインしたり、データレコードの補完に利用したりできる。
 - ウィンドウで問い合わせができる。
    - タンブリングとスライディング。