Kestrel クイックスタート
Kestrel は Twitter のバックエンドで膨大なリアルタイムデータを処理している分散メッセージキューシステムです。キューに特化して高速性とコンパクト性を優先した設計となっており、JMS で規定されているようなエンタープライズ向けメッセージキューとは方向性がかなり異なります。
JMS | Kestrel | |
---|---|---|
トランザクション | あり | なし |
配信形式 | Point to Point, Publisher/Subscriber |
Point to Point |
FIFO | 強い順序付け | 弱い順序付け |
元々 Twitter では Starling (ムクドリ) という名で Ruby によるメッセージキューを実装していましたが、増え続けるトラフィックを捌ききれず何度もクラッシュしていたため Scala で書きなおしたという経緯があります (Twitter jilts Ruby for Scala • The Register)。memcached プロトコルを使用するのもその時の名残です。
バージョン | kestrel-2.1.4 |
---|---|
リポジトリ | git://github.com/robey/kestrel.git |
ライセンス | Apache Licence 2 |
実行環境 | Java SE 6 以上 |
プロトコル | memcached |
永続化 | 有 (ジャーナリング) |
分散化 | キュー名のハッシュ値による分散 (クライアントライブラリ) |
冗長化 | 未対応? |
特徴
ダウンロードから起動まで
現在の最新版 Kestrel 2.1.4 を CentOS 5.6 上で起動します。
- kestrel-2.1.4.zip をダウンロードして解凍。
- 解凍後のディレクトリ kestrel-2.1.4/ を /usr/local/kestrel へ移動。これは起動シェルが /usr/local/kestrel/current 前提で動くため。
- シンボリックリンク /usr/local/kestrel/current を作成し /usr/local/kestrel-2.1.4 へ向ける。
- /usr/local/kestrel/current/scripts/kestrel.sh に実行権限を与える。
torao@clove$ wget "http://robey.github.com/kestrel/download/kestrel-2.1.4.zip" --2012-01-02 20:00:01-- http://robey.github.com/kestrel/download/kestrel-2.1.4.zip Resolving robey.github.com... 207.97.227.245 Connecting to robey.github.com|207.97.227.245|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 17368814 (17M) [application/zip] Saving to: `kestrel-2.1.4.zip' 100%[================================================>] 17,368,814 529K/s in 35s 2012-01-02 20:00:36 (488 KB/s) - `kestrel-2.1.4.zip' saved [17368814/17368814] torao@clove$ sudo unzip kestrel-2.1.4.zip [sudo] password for torao: Archive: kestrel-2.1.4.zip inflating: kestrel-2.1.4/config/development.scala inflating: kestrel-2.1.4/config/production.scala … torao@clove$ sudo mkdir /usr/local/kestrel [sudo] password for torao: torao@clove$ sudo mv kestrel-2.1.4 /usr/local/kestrel/ torao@clove$cd /usr/local/kestrel torao@clove$ sudo ln -s kestrel-2.1.4 current torao@clove$ sudo chmod 755 kestrel-2.1.4/scripts/*.sh
さっそく起動したいところですがデフォルトの script/kestrel.sh では daemon コマンドを使用しています。RedHat 系の CentOS は daemon コマンドがありませんので起動シェルの中身を参考に直接 Java コマンドを実行します。
torao@clove$ sudo java -Xmx4096m -Xms1024m -XX:NewSize=768m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -Xloggc:/var/log/kestrel/gc.log -XX:ErrorFile=/var/log/kestrel/java_error%p.log -server -Dstage=production -jar kestrel-2.1.4.jar &
長々としていますが殆どが GC やヒープの使い方に関するオプションですので、多分 java -Dstage=production -jar kestrel-2.1.4 & だけでも動くと思います。
起動した Kestrel は 22133 ポートで接続待機しています。telnet で接続し memcached コマンドを実行してみます (外部から接続する場合はファイアウォールで接続許可を与えて下さい)。コマンドについては Kestrel Github Document の Memcache commands に記述されています。
torao@safran$ telnet clove 22133 Trying 192.168.51.0... Connected to clove.bjorfuan.com (192.168.51.0). Escape character is '^]'. set torao 0 0 5 ABCDE STORED set torao 0 0 10 0123456789 STORED get torao VALUE torao 0 5 ABCDE END get torao VALUE torao 0 10 0123456789 END get torao END get torao/t=1000 END quit Connection closed by foreign host.
問題なさそうです。