Amazonがさまざまなソースにある大規模データをストリーム処理できるサービス、Kinesisを発表した。現在、限定プレビューとして利用できる。
Kinesisとは何か? SQSとどう違うのか? BuckKniferson氏はこう説明する。
KinesisはSQSキューとオートスケーリングのコンピュートインスタンスを新しいプロダクトにまとめたように見えます。Kinesisを使うことで、1秒間に何百万ものPOSTリクエストを受け付け、それらをストリームとしてリアルタイムに処理できます。ストリーム化されたデータを直接S3に送ったり、それを処理するためのアプリケーションやリレーショナルストレージなどへ送ることができます。すべてリアルタイムで。
SQSメッセージは256kbのテキストメッセージに限られます(一般的にはJSONですが、好きなものが使えます)。Kinesisストリームは1秒間にメガバイト単位で用意でき、私が知るかぎり、HTTP PUT経由のどんなデータも受け付けます。
さらに、SQSメッセージはゾーン依存で永続的ではありませんが、Kinesisストリームデータは複数のアベイラビリティゾーンで24時間、アプリから利用できます。SQSメッセージの場合、ゾーンが機能しなくなったり何らかの異常があると、それはなくなってしまいます。SQSにはKinesisのようなスケーラビリティとIOが備わっていないと思います。私はSQSの公開されているIOPS保証をこれまで目にしたことはありませんが、Kinesisはシャードあたり1秒間に1000のPUTリクエストを受け付けることができます。
Kinesisストリームを使って、アプリケーションはデータをキャプチャ、格納、伝送することができる。各ストリームは複数のリーダーとライターを持つことができる。ストリームの容量はシャードという単位で規定される。各シャードは1000書き込みトランザクション、1秒あたり1MBまで書き込める。ユーザはシャードを増減させることで、ダウンタイムなしにストリームの容量を変えることができる。
開発者はKinesisクライアントライブラリを使って、Kinesisを利用したアプリケーションを作ることができる。生産者側はPutRecord APIを使ってデータをプッシュする。消費者側はIRecordProcessorに対する実装を用意し、クライアントは新しいレコードが生成されるとそれを「プッシュ」する。GetShardIteratorやGetNextRecordsといった低レベルのインターフェイスもある。消費者側のコードでは、処理したレコードをAWSストレージサービス(S3、RedShift、DynamoDB)の1つに格納したり、別のKinesisストリームに渡すことができる。
Kinesisでできるリアルタイム処理は、(Hadoopでできるような)バッチ処理とは異なっている。Kinesisの場合、データが到着するとそれは即座に処理される。AmazonはKinesisで実現可能なユースケースとして、ログの処理、ソーシャルメディアデータの処理、ファイナンシャルトランザクションのリアルタイム処理、オンライン機械学習を挙げている。こうした大規模なリアルタイムの複雑な処理を可能にするプロダクトとしては、ほかにStormがある。
InfoQ事務局より追記(2013年12月4日) |
|