2016/04にKafkaのリソースをモニタリングするツールkafka-monitorがlinkedinからOSSとして公開された。

プロデューササービスの生成率とコンシューマサービスの消費率、メッセージ損失、メッセージ重複、エンドツーエンドのレイテンシがグラフとして表示できるようなのでKafkaに繋げてみて試してみる。

環境

現在、最新版は0.10系であるが、0.9と0.8系しか対応していなさそうなので0.9系を使う。

Kafka Monitor supports Apache Kafka 0.8 and 0.9. Use branch 0.8.2.2 to monitor Apache Kafka cluster 0.8.

  • Apache kafka 0.9.0.1
  • Java 1.8

Kafkaの起動

$ cd kafka_2.11-0.9.0.1
$ bin/zookeeper-server-start.sh config/zookeeper.properties &
$ bin/kafka-server-start.sh config/server.properties &

Topicを作る

$ bin/kafka-topics.sh --create --zookeeper localhost:2181 \
--replication-factor 1 --partitions 1 --topic test

Kafka monitorインストール

$ git clone https://github.com/linkedin/kafka-monitor.git
$ cd kafka-monitor
$ ./gradlew jar

CentOSを使っていてGradleのbuildタスクが失敗する場合は以下の手順でjava-1.8.0-openjdk-develをインストールする。

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':services:compileJava'.
> Could not find tools.jar

$ yum install java-1.8.0-openjdk-devel

kafka monitor起動

$ bin/end-to-end-test.sh --topic test --broker-list localhost:9092 \
--zookeeper localhost:2181

http://localhost:8000に接続すると以下の画面が表示される。

metricsのグラフが8個表示される。1秒間隔でグラフが更新されるが、特に表示間隔を変えたりする機能はないため、1秒間隔でグラフが更新されていくのを見てるだけの画面。

Metrics Tableのタブを選択すると8個のmetricsのテーブルが表示される。このテーブルも1秒間隔で更新される。

HTTPでMetrics取得

画面は微妙だけど以下の様にメトリクスをAPIで取得することができるので、運用ツールから値を取れるようになっている。

$ curl localhost:8778/jolokia/read/kmf.services:type=produce-service,name=*/produce-availability-avg
{"request":{"mbean":"kmf.services:name=*,type=produce-service","attribute":"produce-availability-avg","type":"read"},"value":{"kmf.services:name=end-to-end,type=produce-service":{"produce-availability-avg":1.0}},"timestamp":1472922985,"status":200}

まとめ

画面、取得できるMetricsの個数は微妙だが、APIで値を取得することができるので運用ツールから参照させておくといいかも。

おわり。

参考

  1. https://github.com/linkedin/kafka-monitor
  2. https://www.infoq.com/jp/news/2016/07/linkedin-kafka-monitor
  3. https://engineering.linkedin.com/blog/2016/05/open-sourcing-kafka-monitor