Amazon Kinesis

# Amazon Kinesis

https://d1.awsstatic.com/webinars/jp/pdf/services/20180110_AWS-BlackBelt-Kinesis.pdf

## Amazon Kinesis の特徴

  • 概要
    • ストリームデータを収集・処理するためのフルマネージドサービス群
  • 利用場面
  • ストリーミングデータの利用シナリオ
    • データの収集と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)
          • KDG を利用して、Amazon Kinesis Streams またはKinesis Firehose にテストデータを送信できる
      • コンシューマー(データ処理側)
        • Kisnesis Firehose
          • 直接ストリームデータを送信できる
          • Kinesis Firehose から見てデータソースをKinesis Streams しか設定できなくなるので他のデータはKinesis Streams から流すことになる
        • Get* API
        • Kinesis Client Library(KCL)
          • KCL を利用してKinesis アプリケーションを生成できる
          • クライアントライブラリ
          • ステート管理はDynamoDBを利用して行う
            • シャードとワーカーのマッピングを調整
            • 処理されたレコードのチェックポイントを作成
            • ワーカーインスタンスの増減やシャードの分割/結合に追従
        • Kinesis Analytics
        • AWS Lambda
        • Amazon EMR
        • Apache Storm

 

 

### Kinesis Firehose

ストリームデータをAmazon S3, Amazon Redshift, Amazon ESへ簡単に配信

データストアとダイレクトに統合

サーバレスETL

  • コンセプト
    • 配信先に応じて「配信ストリーム」を作成
    • シャードの作成やパーティションキーの指定は不要
    • 制限なしにスケール
    • 1データレコードの最大サイズは1MB
  • 連携
    • Lambda で変換を挟みつつ、データを後続に流す
    • Amazon S3
    • Amazon Redshift
    • Amazon Elasticsearch Service

 

### Kinesis Analytics

ストリームデータを標準的なSQLクエリでリアルタイムに分析

  • コンセプト
    • 分析単位に「アプリケーション」を作成し、入出力となる「ストリーミングソース/ディスティネーション」を設定
    • SQLクエリ実行の前処理としてLambda 関数を指定可能
    • クエリの複雑さとデータのスループットに応じてKPU(Kinesis Processing Units) を設定
    • Kinesis Streams / Firehose -> 入力ストリーム ->  Lambda -> SQL -> 出力ストリーム -> Kinesis Streams / Firehose
    • 様々なタイムスタンプを利用して処理
    • タンブリングウィンドウ/ スライディングウィンドウ を指定して問い合わせ
    • CloudWatch によるアラート
    • 参照テーブルの結合

 

## Amazon Kinesis の適用例

  • ユースケース1
    • Data producer から Kinesis Firehose にデータを送り込む
      • Lambda 経由でAmazon ES にデータを送りKinabaで可視化
      • S3に送り、Amazon Athena で仮説検証
      • 既存のS3 のデータと組み合わせてKinesis Analytics で分析、それをKinesis Streams に送りLambda 経由でSNS で送信まで行い処理を自動化
  • ユースケース2
    • Lambdaを利用したスピード優先の処理
    • Redshift EMRを利用したBatch 処理での分析
  • ユースケース3
    • IoTと組み合わせたセンサーデータの収集と前処理

 

## 雑感

ストリームデータの受け取り、Lambda と連携した処理、データ受け取り後に他のサービスに流す処理を行うサービス。大量のデータを受け取り、分析がしやすい状態に加工して、本職のサービスが利用しやすい状態にすることがメインになる。

大量なデータを受け取ってもフルマネージドで無制限のスケールなので心配する必要がない。

 

Kinesis Data Streams SQSの違いは

SQSはシンプルにキューイングしてコンシューマーはそれを取り出してキューから削除するが、Kinesis は大規模なストリーミングをリアルタイムに処理したり、レコードを数時間後に同じ順序で提供したい場合などで利用される。これはTTL時間の差やレコードのサイズの差にも表れている。

https://aws.amazon.com/jp/kinesis/data-streams/faqs/