Amazon Kinesisはビッグデータのリアルタイムストリーミングをハンドリングするためにデザインされたマネージドサービスです。多彩なデータソースから膨大なデータを受け取ることができ、必要に応じてスケールアップ&ダウンをする事ができます(より詳しいKinesisの情報は以前の投稿をご覧ください)。デベロッパーはKinesis Client Library(KCL)を使ってストリーミングデータを受け取り、処理するプログラムをシンプルに構築することができます。
本日発表の新しいKinesis Producer Library、より大きなレコードサイズへの対応により、さらに容易にKinesisを使ったデータキャプチャが実現可能になります。また、新しいプライスルールの提供によって、小規模なデータ取得ではより安価にキャプチャを実現することが可能になります。
早速見ていきましょう!
最大レコードサイズの増加
Kinesisのレコードは、”ペイロード”と呼ばれるシンプルなBLOB(バイナリーラージオブジェクト)です。Kinesisはデータの中身を確認することはなく、シンプルに記録(レコード)するだけです(PutRecord
もしくは PutRecords
API経由で)。
これまで、Kinesisは1レコードあたり最大50KBまで記録できました。本日の発表で、この制限を20倍に拡大します!それぞれのレコードは最大1MBまで格納可能になります。これによって、より多様なデータが格納できるようになり、これまでに無いKinesisの新しい活用方法が考えられることでしょう。例えばより大きなログファイル、半構造化データ、eメールのメッセージ等の色々なデータを小さく分割することなくKinesisに送信できるようになります。
Put 呼び出し価格の値下げ
これまでの仕組みでは、Putオペレーションはレコード数に比例しており、100万レコードあたり$0.028という価格でした。(訳注:東バージニアリージョンでの価格です。リージョンによって金額が異なります)
今後は、Putオペレーションはペイロードサイズに応じた金額になり、25KBの「ペイロードユニット」単位で計算されます。費用は100万ペイロードユニットあたり$0.014です。言い換えれば、25KB未満の小さなレコードのPutするための費用は、過去の半分で実現できる事になります。Kinesisを現在お使いのお客様の多くはこのような小さいレコードをご利用であり、値下げのメリットを今すぐ得ることができます。
より詳細な情報は、Amazon Kinesisの料金ページをご覧ください。
Kinesis Producer Library (KPL)
そして、最後に一番大きなニュースを。最後まで取っておいたのです!
Webサイト(クリックストリームデータ)、広告サーバ(パブリッシャーのデータ)、モバイルアプリ(カスタマーエンゲージメントデータ)といった多様なアプリケーションのストリーミングデータはKinesisを使ってハンドリングすることができます。
このような環境で高いスループットが求められ、それを実現するためには複数のレコードをまとめて、一回のPutRecords API呼び出しにする必要があります。また、複数のユーザレコードを1つのKinesisレコードにまとめ、利用する際には再度分解するといった方法を検討せざるを得ない場合もあるでしょう。結果として、データを探したりAPIコールを再実行(リトライ)したりといったコードが増えてしまっていました。
新しいKinesis Producer Library (KPL)(英文)は上に書いたようなタスクを助けることが出来るライブラリです。自動的にリトライしたり、調整が可能なKinesisストリームを作成することが出来るようになります。例えば複数のレコードをまとめてPutRecordsで書き出しだすといったバッチ風のロジックを作成したり、ユーザレコードをまとめて大きなペイロードを作成することでスループットを高めたり、Amazon CloudWatchメトリック(スループットやエラーレートを含む)をサブミットするといった事をあなたに代わって実行してくれます。
このKPLはKinesis Client Library (KCL)といっしょに使うことができます。KCLはストリームデータを処理したり、データを集約したりといった複雑なタスクを分散環境に配慮しながら実行するためのものです。これには複数インスタンス間でのロードバランシングや、インスタンス障害への対応、レコード処理のチェックポイントや、シャーディングが変更された際への対応が含まれています。
KCLが(KPLによって)複数レコードで集約されたレコードをレシーブすると、自動的に元のレコードに展開され、KCLクライアントから利用可能になります(この機能を使うには、KCLのバージョンを更新する必要があります)
KPLは非同期かつノンブロッキングのJava APIを提供しています。これによって、レコードをハンドリングし、その後オブジェクトをレシーブしてリターンするというような内容をシンプルに記述することができます。以下がaddUserRedocrdメソッドのサンプルです:
public void run() {
ByteBuffer data = Utils.generateData(sequenceNumber.get(), DATA_SIZE);
// TIMESTAMPがパーティションキー
ListenableFuture f =
producer.addUserRecord(STREAM_NAME, TIMESTAMP, Utils.randomExplicitHashKey(), data);
Futures.addCallback(f, callback);
}
(訳注:これはレシーブ部分のみのコードです。callback部分の作成等、詳細は以下の"Developing Producers with KPL"を参照してください)
KPLのコアはC++で記述されています。他の言語用のラッパーはあまりお待たせせずに提供できるようになる予定です。
KPLはLinuxとOS X上で動作します。Amazon Linux AMI、Ubuntu、RHEL、OS X、OS X Server用に単独で実行できるバイナリが用意されています。ソースコードとユニットテストも提供されています(注:KCLとKPLは別々のパッケージで提供されています)
より詳細な情報は"Developing Producers with KPL"(英文)を参照してください。
— Jeff; (翻訳:下佐粉 昭)