AWS re:Invent2013参加レポート #25 Introducing Amazon Kinesis: The New AWS Service for Real-time Processing of Streaming Big Data
Amazon Kinesisとは何か?
re:Invent Keynote Day2で発表されたAmazon Kinesisについて、発表ではTwitterストリームがリアルタイムに処理される様子が映像で流れて、何となくスゴそうという雰囲気が伝わってきました。
リアルタイム処理を、フルマネージドで、時間あたりMBからTBで、柔軟に保存して収集して分析して、使うのは簡単。
Kinesisと連携するアプリは、予約されたスループットで、1MB/sから2MB/sで、1000トランザクション/s/ユニットで、キャパシティの追加削除を動的にできる。
たしかに、、、スゴい!。ということで、午後のセッションの参加して来ました。
Real-time Processing of Streaming Big Data
このセッションでは、Kinesisの紹介として、バッチ処理からリアルタイム処理への変遷について、ビックデータをどのようにリアルタイム処理するか、機能と利点、キーコンセプト、ユースケース、パターンについてお伝えします。
データはどんどん増えています。ログ、モバイル、センサー、ソーシャルなど、どんどん増える一方です。
ビックデータを扱うソリューションが既に用意されています。バッチ処理としてはRedshiftやEMRが有名です。今回、Kinesisによってリアルタイム処理を実現します。
これからのビックデータ処理はどのように変わるのでしょうか。CloudWatchのメトリクスで直にどこが間違ったか見つけられます。待ち時間はありません。即座に分析を行い、即座にビジネス上の決断をすることができます。高速なETLとしてRedshiftにデータを流すことができます。
リアルタイムビックデータになると何が新しくなるのでしょうか。ビジネスシナリオとしては、ログの収集やデータのフィード、継続的なメトリクスやKPIの取り出し、リアルタイムデータ分析、複雑なストリーム処理などが考えられます。また、ビジネスエリアとしては、ソフトウェアやテクノロジー、広告テクノロジーやマーケティング、金融サービス、Eコマースなどが考えられます。
顧客が求める基本的な要件は何でしょうか。エンドツーエンドでの低遅延、拡張性、耐障害性、伸縮性、開発者が作りやすい、収集・処理・分析をマネージドサービスで提供などです。
ということで、Amazon Kinesisが誕生したのです。
Kinesisへ投げられたストリームは、Shardを経由してKinesis Client Libraryを実行するアプリを通じて各自データストアに格納されます。例えば、重複の排除してS3へ、計算結果を抽出してDynamoDBへ、時系列解析をRedshiftで、機械学習をして次のKinesisへと続きます。
Kinesisは、どのように大量のデータを高速に投入できるのか考えてみましょう。KinesisのStreamは複数のShardを束ねています。それぞれのShardは1MB/secと1000トランザクション/secの性能です。 Shardのデータは24時間で消えてしまいます。Streamの性能は増減可能です。 Kinesisにデータを投入するためにシンプルなPUTインタフェースを持っています。 パーティションキーは、ShardにPUTするために使われます。 PUTが成功すると、ユニークなシーケンス番号が返されます。
Kinesisからデータを取得する方法を見てみましょう。Kinesis内にあるShardからストリームを取得するためには、kinesis Client Libraryを用います。このライブラリは、フォールトトレラント、単一実行、リアルタイム処理のために用います。それぞれのShardに対してKinesis Workerが起動して処理を実行します。処理が失敗した場合には再起動しますし、Shardの数が増減した場合にも自動で対応します。
そもそも、Kinesisはデベロッパーに何ももたらしてくれるのか考えてみましょう。管理が簡単、リアルタイムのパフォーマンス、高いスループット、伸縮性、各種データストアとの連携、リアルタイムアプリケーションの開発、低コストなどです。まぁ、とくかく使ってみましょう。リアルタイムな処理と言われてもピンと来ないかもしれませんが、今まで出来なかったから考えもしなかったのです。Kinesisで出来ることのイメージが湧くようになれば、様々なビジネスに活用できると思います。
まとめ
Amazon Kinesisは高速に分散処理を行うプラットフォームであることが分かりました。次回は具体的なアプリケーション開発について解説をしたいと思います。