前置き
先週の土曜日にオープンソースカンファレンスに遊びに行った際に、今年9月に公開されたOSSのMQ(Message Queue)であるPulsarの話を聞くことができ、以前から少し気になっていたので使ってみた。Yahoo! Inc.の方が「どうして我々はPulsarを作ったのか?」や「主な特徴や運用実績」などを"英語"で説明して頂いた。とりあえず、Pulsarとは一言でいうと、「スケーラブルで低レイテンシーなPub/Sub メッセージングシステム」!よくわからない。
詳しい紹介は「ハイパフォーマンスでスケーラブルなメッセージングシステム:Pulsarの紹介」に任せるとして、ここでは最低限の情報のみ記述します。以下私の認識なので、間違っていたらごめんなさい。
最低限のPulsar情報
- MQとは高速にメッセージ(文字列)をやり取りする仕組み
- Apache Camel: ActiveMQ も同様のMQの機能を持つOSS
- コンポーネントとして以下の3つが登場人物
- Broker(ブローカー)
- Publisher(パブリッシャー)または、Producer(プロデューサー)
- subscriber(サブスクライバー)または、Consumer(コンシューマー)
- PulsarはProducer,Consumerと呼んでいるので、そちらをここでは使用する。役割は以下の通り。
- Broker:メッセージを仲介する人
- Producer:メッセージを送る人
- Consumer:メッセージを受け取る人
- MQを利用するとメッセージの送り手と受け手の関係が、1対1でなく、N対Nにすることができる
ソースコードはGitHub https://github.com/yahoo/pulsar
使ってみる
オープンソースカンファレンスで頂いた資料に「Pulsarの利用はかんたん4ステップ」と書かれているのでとりあえずそれをやってみる。
※注意:java8をインストールする必要がありました。
1. GitGubからパッケージをダウンロードして展開し、Standalone serverを起動します。
$ curl -L -O https://github.com/yahoo/pulsar/releases/download/v1.15.2/pulsar-1.15.2-bin.tar.gz
$ tar xvfz pulsar-1.15.2-bin.tar.gz
$ ./pulsar-1.15.2/bin/pulsar standalone
2. 別ターミナルを立ち上げてConsumerを起動します。
$ cd pulsar-1.15.2/bin/
$ ./pulsar-client consume -s 'sub' 'persistent://sample/standalone/ns1/my-topic'
3. さらに別のターミナルを立ち上げて、Producerを起動しメッセージを送信します。
$ cd pulsar-1.15.2/bin/
$ ./pulsar-client produce -m 'Hello Pulsar!' 'persistent://sample/standalone/ns1/my-topic'
4. Consumer側のターミナルに先ほどProducerから送信したメッセージが表示されます。
----- got message -----
Hello Pulsar!
2016-11-10 14:49:54,387 - INFO - [main:PulsarClientImpl@302] - Client closing. URL: http://localhost:8080/
2016-11-10 14:49:54,695 - INFO - [main:ConsumerImpl@571] - [persistent://sample/standalone/ns1/my-topic] [sub] Closed consumer
2016-11-10 14:49:54,838 - INFO - [main:CmdConsume@154] - 1 messages successfully consumed
2016-11-10 14:49:54,847 - INFO - [pulsar-client-io-1-1:ClientCnx@94] - [id: 0x9ca18431, L:/127.0.0.1:49311 ! R:localhost.localdomain/127.0.0.1:6650] Disconnected
java8をインストール必要があり、standaloneを立ち上げる際にはじめエラーが出たが、思ったよりは簡単だった。
自宅に一度brokerであるpulsar standaloneサーバを立てておけばいろいろできそう?いろんなセンサ情報をproduceでとりあえずbrokerに投げといて、DBに保存するなり、その場で処理するなりはconsumeで実装すると、、、夢は広がる!でも、普通のMQTTのbrokerでもいい気がする。まぁ登壇者によると、高機能で高信頼性らしいから今後何かに使用してみようと思う。デメリットとしては、現在OSSの日本語ドキュメントがない。新しい物好きの方は是非お試しあれ!
動作環境メモ
上記のコマンドは、windows上のvagrantで起動したCentOS6.4で動かしてみました。virtualbox上のubuntuではうまくいかなかった。virtualbox調子悪い気がする。