(レポート) BDT320: ストリームデータフローと Amazon Kinesis Firehose、Amazon Kinesis Analytics #reinvent

2015.10.10

ウィスキー、シガー、パイプをこよなく愛する大栗です。 re:Invent 2015でKinesis FirehoseとKinesis Analyticsのセッションに参加したのでレポートします。

Amazon Kinsisについて

  • コンセプト
  • S3とRedshiftへのエクスペリエンス
  • データのプットにAmazon Kinesis AgentとKey APIを使用する
  • 価格
  • データ配信のパターン
  • keyメトリクスへの理解
  • トラブルシューティング

ストリームデータのAWS流のやり方

  • プロビジョン、デプロイ、管理が簡単
  • エラスティックに拡張可能
  • リアルタイムなレイテンシ
  • 使った分だけ支払う、先払い無し
  • 特定のユースケースに対する正しいサービス

re:Invent 2013時点のKinesis Streams

発表時点では、以下のような構成でした。

Jpeg

Kinesisを使用したケーススタディ

日本企業では、GREE様、ガリバー様、スシロー様が紹介されています。

Jpeg

Amazon Kinesis Streamsの新しい機能

  • New:PutRecords APIで500レコード、5MBのペイロード
  • Update 2015:個別の最大ペイロードが50KBから1MBへ増加
  • Update 2015:エンドツーエンドの伝播時間の削減
  • Update 2015:Kinesis Client LibraryがPython、Node.js、Ruby ...
  • New:Kinesis Producer Library
  • New:サーバサイド・タイムスタンプ
  • New:保持期間が24時間から7日へ拡張

Amazon Kinesis Streams

  • 簡単な管理
  • リアルタイムアプリケーションの構築
  • 低価格

スシロー:回転寿司レストラン

スシロー様の例のご紹介です。

Jpeg Jpeg

Amazon Kinesis Firehose

Amazon Kinesis Firehoseには以下の特徴があります。

  • 管理無し
  • ダイレクト・ツー・データの統合
  • シームレスな伸縮性

3個の単純なコンセプトとして、 デリバリ・ストリーム、レコード、データ・プロデューサ、があります。

Amazon Kinesis Firehose to Redshift

Redshiftへ保存するには2つのステップがあります。

  1. 途中の宛先としてS3バケットを使います。 ・最も効果的な方法はRedshiftへ大規模のロードです ・S3は一切データが消えず、いつも安全で、使用可能です
  2. FirehoseがCOPYコマンドを同期的に発行します。前回のCOPYコマンドが終了しACKが戻ると継続的にCOPYコマンドを発行します。

Amazon Kinesis Agent

ソフトェア・エージェントでFirehoseへのデータ送信が簡単になります。

  • ファイルを監視して新しいデータレコードをデリバリ・ストリームへ送信します
  • ファイルのローテーション、チェックポイント、失敗時のリトライをハンドリングします
  • 信頼でき、タイムリーに簡単な方法で全データを送ります
  • CloudWatchメトリクスは監視とストリーミングプロセスの障害対応に役立ちます。

Amazon Kinesis FirehoseのAPI概要

  • CreateDeliveryStream:デリバリ・ストリームを作成します
  • DeleteDeliveryStream:デリバリ・ストリームを削除します
  • DescribeDeliveryStream:デリバリ・ストリームの説明と設定情報を表示します
  • ListDeliveryStreams:デリバリ・ストリームを一覧を表示します
  • UpdateDestination:デリバリ・ストリームが配置するS3バケットの情報を更新します
  • PutRecord:1つのデータ(1000KBまで)をデリバリストリームへプットします
  • PutRecordBatch:複数のデータ(500レコードか5MBまで)をデリバリストリームへプットします

Amazon Kinesis Firehoseの価格

シンプルで、使った分だけ支払い、先払い無しです。 1GBのデータ処理当たり、$0.035です。

Amazon Kinesis FirehoseとAmazon Kinesis Streams?

  • amazon Kinesis Streamsはカスタム処理が必要な場合のサービスです。入力データごとに1秒以下のレイテンシで、ストリーム処理のフレームワークを選択できます。
  • amazon Kinesis Firehoseは管理無しで、S3やRedshiftを使った既存の分析ツールが使用可能で、そしてデータのレイテンシが60秒以上の場合のサービスです。

Amazon Kinesis Firehoseの詳細

Amazon S3へのデータ送信方法

S3オブジェクトのサイズと頻度をコントロール

  • 1つのデリバリ・ストリームは1つのS3バケットへ
  • バッファサイズとインターバルで送信のサイズと頻度をコントロールできます
  • バッファサイズ - 1〜128MB
  • バッファインターバル - 60〜900秒
  • FIrehoseが各レコードをつの大きなオブジェクトへ結合します
  • 最初にトリガーの条件を満たすのレコードを送信します
  • バッファしたした後に圧縮
  • GZIP、ZAIP、SNAPPY
  • 送信されたS3オブジェクトはFirehoseへ投入された全データより小さくなります
  • Amazon RedshiftではGZIPのみサポートしています。

AWS IAM Roleと暗号化

  • FirehoseにはS3バケットへアクセスするIAM Roleが必要です
  • KMSを使ったデータ暗号化

S3オブジェクトの命名規則

  • Amazon S3へ置く前にUTCでYYYY/MM/DD/HHのプレフィックスがつきます
  • 上位のフォルダにS3プレフィックスを指定します
  • 名前のパターンは"デリバリ・ストリーム名-デリバリ・ストリームバージョンYYYY-MM-DD-SS-ランダム文字列"です。

FirehoseがS3へ接続出来ない場合

  • FirehoseでS3バケットへ接続出来ない場合、問題が解決するまで55分毎にリトライします
  • Firehoseはデータを24時間保存します
  • S3バケットが使用できて追いつくとすぐに再開されます
  • 24時間以上アクセス出来ないとデータが消えます

Amazon Redshiftへのデータ送信方法

あなたの代わりに2ステップを実行します

  • 途中の宛先としてS3バケットを使います。
  • FirehoseがCOPYコマンドを同期的に発行します。前回のCOPYコマンドが終了しACKが戻ると継続的にCOPYコマンドを発行します。

Redshiftクラスタへロードする頻度

  • S3への送信は元になります - バッファサイズとインターバル
  • RedshftのCOPYコマンドの頻度
  • 効果的にするにはFirehoseでマニフェスト・コピーを使います

もしRedshiftクラスタへアクセス出来ない場合

  • Firehoseがクラスタへアクセス出来ない場合は5分毎にリトライします
  • 60分アクセス出来ない場合は、現在のS3オブジェクトのバッチを飛ばして次へ移ります
  • 飛ばしたオブジェクト情報はエラーフォルダにマニフェストファイルとしてS3バケットに送ります。手動で適切な戻しをするために情報を使用して下さい

Amazon Kinesis Firehoseのメトリクス

S3へロードする場合のメトリクス

  • Incoming.Bytes
  • Incoming.Records
  • DeliveryToS3.Bytes
  • DeliveryToS3.DataFreshness
  • DeliveryToS3.Records
  • DeliveryToS3.Success

Redshiftへロードする場合のメトリクス

  • DeliveryToRedshift.Bytes
  • DeliveryToRedshift.Records
  • DeliveryToRedshift.Success

Amazon Kinesis Analytics

標準SQLを使ってストリームデータを継続的に分析できます

  • ストリームにSQLを設定:データストリームに簡単につなげて、既存のSQLのスキルを当てはめます。
  • リアルタイムアプリケーションを構築:ストリーム・ビッグデータに対して1秒以下のレイテンシで継続的に処理を実行します。
  • エラスティックにスケール:管理者不在で適合したデータのスループットをエラスティックにスケールします。

Jpeg

さいごに

今回のre:InventではKinesisについて多くのアップデートが発表されました。今まで以上にIoTやデータ分析に適用できる場面が増えたので、実案件での使用例が増えると期待しています。