yahoo/Pulsar (standalone) 用のDockerfileを作った
PulsarはYahooが作ったPub/Subシステム。マルチテナント環境で運用されることを前提にした設計、大量のトピック・パーティションがある時Kafkaよりパフォーマンスに優れる、などの特徴がある。
先日、Pulsar勉強会に参加して、そこそこに魅力が伝わってきたので、Dockerコンテナでサクッと試せるよう、Dockerfileを書いた。ついでにJavaでクライアントも書いた。
使い方
Brokerの起動
まずDockerコンテナでPulsar Brokerを立ち上げる(standaloneモードだと同時にZookeeperやBookKeeperも立ち上がる)。
$ docker run -d \ -p 8080:8080 -p 6650:6650 \ --env BROKER_HOST=192.168.99.100 \ laclefyoshi/pulsar-docker-standalone
ポート8080はBrokerのHTTPエンドポイントのポート、ポート6650はBrokerのサービスのポートで、クライアントはHTTPエンドポイント(8080)からBroker情報を受け取り、実際にデータをやり取りするのはサービス(6650)を使う。クライアントが使うのはこの2つの通信経路だけ。
環境変数 BROKER_HOST はクライアントから見て、どのホストにBrokerがあるのかを指定するためのもの。Brokerとクライアントが同じマシンにあるのなら 127.0.0.1 でも可。
Javaクライアントの準備
GitHub - laclefyoshi/pulsar-docker: PulsarをDockerコンテナで使うの client-example に入り、Mavenでビルドする。
$ git clone https://github.com/laclefyoshi/pulsar-docker.git $ cd pulsar-docker/client-example/ $ mvn clean package $ ls target/ classes/ generated-sources/ maven-archiver/ maven-status/ original-pulsar-client-example-1.0-SNAPSHOT.jar pulsar-client-example-1.0-SNAPSHOT.jar
トピックなどの設定は、standaloneモードで用意されているデフォルトのものがハードコーディングされている。
Concumerの起動
Brokerからメッセージを受け取るクライアントとしてConsumerを立ち上げる。BrokerのHTTPエンドポイントを引数で指定する。
$ java -cp target/pulsar-client-example-1.0-SNAPSHOT.jar \ org.saekiyoshiyasu.PulsarConsumer http://192.168.99.100:8080
Producerの起動
Consumerとは別のターミナルで、Brokerへメッセージを送信するクライアントとしてProducerを立ち上げる。Consumerと同様、BrokerのHTTPエンドポイントを引数で指定する。
$ java -cp target/pulsar-client-example-1.0-SNAPSHOT.jar \ org.saekiyoshiyasu.PulsarProducer http://192.168.99.100:8080 $
Consumerでのメッセージ受け取り
起動したままのConsumerは、Producerが送信したメッセージを受け取り、内容を出力する。
Received message: Hello 0 Received message: Hello 1 Received message: Hello 2 Received message: Hello 3 Received message: Hello 4 Received message: Hello 5 Received message: Hello 6 Received message: Hello 7 Received message: Hello 8 Received message: Hello 9