MacにApache StormをインストールしてApache Kafkaに繋ぐ
Apache StormをhomebrewでインストールしてKafkaに繋ぐまでの記事です。
動機
Mac開発環境の人は多くいる中で、Macでのセットアップ方法が書かれている記事がここ一年だと皆無なので、記事を書こうと思いました。 以下が検索結果である。
Apacheにひっかかてか、Kafkaばかりヒットします。
最近では、いろんなOSSがApache XXX streamみたいな名前でストリーム処理のためのソフトウェアを出しているので、この業界では老舗のようになっています。
引用: https://databaseline.wordpress.com/2016/03/12/an-overview-of-apache-streaming-technologies/
個人的には影響しあってこれらが乱立しているので、老舗を抑えておきたいと思います。
公式サイト
1. Apache Zookeeperのインストール、起動
brew install zookeeper brew service start zookeeper
2. Apache StormのHomebrewでのインストール
まずフォーミュラがあることを確認しましょう。
brew search storm ==> Formulae storm ✔ stormlib stormpath-cli stormssh stormssh-completion
あったのでインストールしてみます。
brew install storm
インストール先は/usr/local/Cellar/storm/1.2.2
です。
自分はv1.2.2
を入れました。
3. Stormの設定
設定ファイルはconf/storm.yaml
に記述します。
最低限設定しないといけないことは、
- zookeeperのサーバー
- nimbusノード
です。
conf/store.yaml
にも
########### These MUST be filled in for a storm configuration storm.zookeeper.servers: - "localhost" nimbus.seeds: ["localhost"] # # # ##### These may optionally be filled in: ...
とMUST
と書かれてあります。
localhostの場合は上記のように記述すれば大丈夫です。
- nimbus.seeds: 古い文献だと、
nimbus.seeds
ではなくてnimbus.host
となっているかもしれませんが、v1.0+
から配列で定義することになったみたいです。 - storm.local.dir: 状態(state)のためのディレクトリ。デフォルトでは
$STORM_HOME/storm-local
- supervisor.slots.ports: ワーカーの数とポート指定。デフォルトではワーカーは四つ立ちます。
そしてnimbus
とsupervisor
を起動してみましょう。
どれもバックグラウンドで実行するのが良いと思います。
bin/storm nimbus & bin/storm supervisor & bin/storm ui &
http://localhost:8080にみに行くとWeb UIがみられます。
どれも数分前にたちあげたものなので良いかと思います。
4. StormとKafkaを接続する
公式サイトには以下のように二つあります。 バージョンごとにかなり差異があるので、注意が必要です。
新しい方を利用することが推奨されているので、そっちを使います。
サンプルが/libexec/examples/store-kafka-client/
にあります。
また公式ページでは
final TopologyBuilder tp = new TopologyBuilder(); tp.setSpout("kafka_spout", new KafkaSpout<>(KafkaSpoutConfig.builder("127.0.0.1:" + port, "topic").build()), 1); tp.setBolt("bolt", new myBolt()).shuffleGrouping("kafka_spout");
のように定義されていました。
ここでは、Tride API
という高レベルAPIが用意されてある。
特にユースケースの大半であるApache Kafka <- Apache Storm
の構成で追っていきます。
Kafka関係なく、Apache Stormの主要な概念は解説しません。
4.1 KafkaSpout
KafkaSpoutConfig
クラスで実装することできる。
これはbuilder
パターンであるので、デザインパターンを知らない人は以下の本が必読です。
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2004/06/19
- メディア: 大型本
- 購入: 51人 クリック: 762回
- この商品を含むブログ (397件) を見る
Spoutとして機能させるためにはいくつかの設定をKey/Value形式で渡す必要があります。
exampleでは、以下のよう関数定義しています。
5. Stormのトポロジの追加
Boltは必要性に応じて使用してください。
そして、コンパイルしたら終わりです。
bin/storm jar [jar file] [class name] [topology name] [-option]