Amazon Kinesis
https://d1.awsstatic.com/webinars/jp/pdf/services/20180110_AWS-BlackBelt-Kinesis.pdf
- 概要
- ストリームデータを収集・処理するためのフルマネージドサービス群
- 利用場面
- 広告/マーケティング
- IoT
- ゲーム
- コンシューマー向け
- 運用/セキュリティ
- ストリーミングデータの利用シナリオ
- データの収集とETL
- 配信や入札データの収集
- 顧客行動データの収集
- 運用のシステムメトリクスの収集
- 継続的なメトリクス計算
- コンバージョンレート/収益/カバレッジの計算
- クリックレートの計算
- PVの計算
- システムログ分析
- リアルタイム分析と応答
- ユーザ行動に応じた配信・入札エンジンの最適化
- 稼働状態予測あアラート・通知の発行
- レコメンデーションエンジンの最適化
- 異常検知
### Kinesis Streams
ストリームデータを処理するためのアプリケーションを独自に構築
- アーキテクチャ
- input
- 認証・認可を経てデータをInput
- たくさんのストリームデータがKinesis Streams へ
- 3AZでの強い生合成でデータを複製
- 順序つきのイベントストリームとして複数のアプリケーションから同時アクセス可能
- Output
- コンセプト
- データの種類や用途に応じてストリームを作成。ストリームは1つ以上のシャードで構成
- 保存されるデータの単位を「データレコード」と呼ぶ
- 保存期間はデフォルトで24時間。最長7日
- 1データレコードの最大サイズは1MB
- ストリーム内のシャード数を増減することでスループットをコントロール
- データレコードの分散
- データ入力時に指定するパーティションキーで保存先のシャードが決定
- 分散して処理が可能に
- 全てのデータレコードにはシーケンス番号(シャード内でユニーク)がアサインされ、順序が保証される
- サポートするプロデューサー・コンシューマー
- プロデューサー(送信側)
- AWS SDK
- Kinesis Producer Library (KPL)
- Amazon Kinesis Streams にデータを送信するOSSの補助ライブラリ
- Aggregation
- 複数件のデータを1データレコードに集約して送信可能
- Collection
- 複数レコードをバッファリングして送信
- Kinesis Agent
- Amazon Kinesis サービスにデータを簡単に収集して取り込むスタンドアロンJavaアプリケーション
- ファイルのローテート処理、失敗時の再試行、フォーマットの変換やログのパースなどの前処理をしてくれる
- Cloudwatch へメトリクスを送信
- Kinesis Streams / Kinesis Firehose のどちらへも送信可能
- AWS IoT
- Kinesis Log4j Appender
- Fluentd
- CloudWatch Events/Logs
- Amazon Kinesis Data generator(KDG)
- コンシューマー(データ処理側)
### Kinesis Firehose
ストリームデータをAmazon S3, Amazon Redshift, Amazon ESへ簡単に配信
データストアとダイレクトに統合
サーバレスETL
- コンセプト
- 配信先に応じて「配信ストリーム」を作成
- シャードの作成やパーティションキーの指定は不要
- 制限なしにスケール
- 1データレコードの最大サイズは1MB
- 連携
### Kinesis Analytics
ストリームデータを標準的なSQLクエリでリアルタイムに分析
- コンセプト
- 分析単位に「アプリケーション」を作成し、入出力となる「ストリーミングソース/ディスティネーション」を設定
- SQLクエリ実行の前処理としてLambda 関数を指定可能
- クエリの複雑さとデータのスループットに応じてKPU(Kinesis Processing Units) を設定
- Kinesis Streams / Firehose -> 入力ストリーム -> Lambda -> SQL -> 出力ストリーム -> Kinesis Streams / Firehose
- 様々なタイムスタンプを利用して処理
- タンブリングウィンドウ/ スライディングウィンドウ を指定して問い合わせ
- CloudWatch によるアラート
- 参照テーブルの結合
- ユースケース1
- Data producer から Kinesis Firehose にデータを送り込む
- ユースケース2
- Lambdaを利用したスピード優先の処理
- Redshift やEMRを利用したBatch 処理での分析
- ユースケース3
- IoTと組み合わせたセンサーデータの収集と前処理
## 雑感
ストリームデータの受け取り、Lambda と連携した処理、データ受け取り後に他のサービスに流す処理を行うサービス。大量のデータを受け取り、分析がしやすい状態に加工して、本職のサービスが利用しやすい状態にすることがメインになる。
大量なデータを受け取ってもフルマネージドで無制限のスケールなので心配する必要がない。
Kinesis Data Streams とSQSの違いは
SQSはシンプルにキューイングしてコンシューマーはそれを取り出してキューから削除するが、Kinesis は大規模なストリーミングをリアルタイムに処理したり、レコードを数時間後に同じ順序で提供したい場合などで利用される。これはTTL時間の差やレコードのサイズの差にも表れている。