Kafka Manager を構築してみたら Kafka 2.0.0 は対応していなかったお話
Kafka
でクラスター中のノード(Broker
)やパーティション、トピックを WEB ベースで管理するためのツールとして、Kafka Manager
というものがあるそうです。
公式ページである Github リポジトリには、README.md 中に実際の WEB の UI が載っていました。表示されている情報としては、Kafka
にバンドルされている kafka-topics.sh
や kafka-consumer-groups.sh
等から取れるもののようですが、統計的に可視化されていたり、更新処理までできるようです。
Kafka Manager を構築する
公式ページからはバイナリや rpm
パッケージ等は配布されていないようなので、自分でビルドしていきます。
まずは Github
からソースコードを clone
しておきましょう。$ git clone git@github.com:yahoo/kafka-manager.git
ブランチは特に何も考えずに master
を使うことにします。
ソースコードを取得したら、ビルドツールの sbt
からビルドすることができます。$ ./sbt clean dist
ビルドすると target/universal/
ディレクトリ配下に kafka-manager-1.3.3.21.zip
ができあがります。これが Kafka Manager
の実行バイナリを固めた zip
ファイルです。
これを展開すると、bin
ディレクトリ下に kafka-manager
という実行バイナリがあります。これを使うと Kafka Manager
が起動します。$ bin/kafka-manager -Dkafka-manager.zkhosts=localhost:2181 -Dhttp.port=8080
システムプロパティ kafka-manager.zkhosts
には Kafka
の Zookeeper
のホストを指定します。今回は localhsot
で Kafka
クラスターが動いているという前提で、同じマシンの Zookeeper
を指定しました。 http.port
値は Kafka Manager
自体の待受ポートです。8080 ポートを指定しているので、http://localhost:8080 にアクセスすれば Kafka Manager
を使うことができます。
続きを読む
Kafka
コメント (0) 2018/10/05 19:54:32
Java から Kafka の Producer を利用してみる
前回 Java で Kafka の Consumer を試してみましたが、今回は Producer を実装してみました。
Consumer 側はパーティション分割された Topic からのメッセージの受け取りでだいぶ詰まっていたのですが、Producer 側はクラスター構成に対してもすんなりと動かせました。実装コードは接続先の Kafka ブローカーの設定値を書き換えるくらいで、同じコードが動いてくれました。
利用したのは前回と同じく Kafka の Java クライアント、kafka-clients
です。dependencies {
...
compile group: 'org.apache.kafka', name: 'kafka-clients', version: '2.0.0'
...
}
Gradle を使う場合、build.gradle
に追加する依存性は前回と同じです。Maven の場合はこの辺りを参考にしてください。
単一ノード構成で Producer を利用する
Producer のサンプルコードは以下の通りです。接続設定をして、Producer のインスタンスを作って、メッセージを送るだけというとてもシンプルな内容になりました。
続きを読む
Kafka
コメント (0) 2018/10/03 19:20:04
Java から Kafka の Consumer を利用してみる
分散メッセージングシステムである Kafka を Java から利用してみました。手始めに今回は Consumer を使い、メッセージの受け取りを試してみることにします。
公式ドキュメントに記載せれている通り、Kafka には Java から接続するためのクライアントライブラリがあります。Maven Central Repository にも公開されているので、Maven や Gradle からすぐに利用することができます。
今回は実際にこの kafka-clients
ライブラリを使って接続してみたのですが、単一ノード構成では問題ないものの、複数ノードでのクラスター構成への接続が一部意図通りに動作してくれませんでした。記事の内容としてはすっきり終わらないものの、現時点でのノウハウとして書いておこうと思います。
kafka-clients をプロジェクトの依存性に追加する
プロジェクト管理には Gradle 4.8.1 を使ってみます。プロジェクトを作ったら、build.gradle
に以下の依存性を追加します。dependencies {
...
compile group: 'org.apache.kafka', name: 'kafka-clients', version: '2.0.0'
...
}
kafka-clients
の現在の最新バージョンは 2.0.0 です。
続きを読む
Kafka
コメント (0) 2018/10/02 19:47:35
Kafka 複数台でクラスターを組んでみる
前回シングルノードでの Kafka 構築を試してみたわけですが、今回は引き続き Kafka 公式ページの Quick Start に従って、Kafka(Broker)複数台でのクラスター構築を試してみたいと思います。
Kafka の Broker が持つデータは Topic 毎にパーティションという単位で分割することができ、そのパーティションを別々の Broker (のプロセスやサーバー)に割り当てたり、コピーを置いておいたりすることで、データ分散による性能改善や冗長化を実現することができます。パーティション内のデータを参照するためのインデックスもパーティション単位で作られるようなので、複数のパーティションにわけておくことで、参照性能をあげられる仕組みになっているようです。分割や複製されたパーティションの管理は Kafka が自動で行ってくれるとのことなので、今回は障害時のフェールオーバーまで試してみたいと思います。
Kafka クラスターを構築する
Broker 2 つで Kafka クラスターを構築してみます。今回は 1 つのマシン内に各 Broker を別プロセスとして用意しようと思います。実際の運用では、サーバーを複数台用意して各マシンで 1 プロセスずつ動かすことになると思いますが、どのマシンで作業するかが変わるだけでやることは同じです。
前提として、Kafka のインストールまでは終わっているものとします。
Broker 毎の設定ファイルとして、server.properties をコピーして server-1.properties と server-2.properties を用意します。# server-1.properties
# Kafka サーバー(Broker)の ID 値
broker.id=1
# Kafka サーバー(Broker)への接続 URI
listeners=PLAINTEXT://localhost:9093
# Kafka サーバー(Broker)の Zookeeper のホスト/ポート
zookeeper.connect=localhost:2181
# Kafka サーバー(Broker)のデータ保存ディレクトリ
log.dirs=/tmp/kafka-logs-1
# server-2.properties
# Kafka サーバー(Broker)の ID 値
broker.id=2
# Kafka サーバー(Broker)への接続 URI
listeners=PLAINTEXT://localhost:9094
# Kafka サーバー(Broker)の Zookeeper のホスト/ポート
zookeeper.connect=localhost:2181
# Kafka サーバー(Broker)のデータ保存ディレクトリ
log.dirs=/tmp/kafka-logs-2
broker.id 値は Broker 毎にユニークである必要があるため、別々の値を設定しています。1 と 2 です。
listeners 値については、今回は同じマシン内の別プロセスとして動かすので、異なるポート番号を指定しました。複数サーバーを用意して 1 サーバー 1 プロセスで動かす構成なら、ポートは同じでもいいと思います。また、ホスト名は localhost からの接続しか試さないので localhost にしていますが、複数サーバーでクラスターを組む場合は localhost 以外から触ることになるでしょうから、各サーバーのホスト名を書くことになると思います。
zookeeper.connect 値も、今回は同じマシン内で動いている Zookeeper を使うので localhost:2181 としていますが、複数サーバー構成でクラスターを組む場合には、Zookeeper の動いているサーバーのホスト名/ポート番号を設定することになるでしょう。
log.dirs 値は、Broker のデータの保存先ディレクトリです。今回は同じマシンで複数プロセスの Broker が動くので、異なるディレクトリを設定しました。複数サーバーを用意して 1 サーバー 1 プロセスで動かす構成なら、同じパスでもいいと思います。
続きを読む
Kafka
コメント (0) 2018/08/27 15:12:18
Kafka を試してみる
Kafka は分散メッセージングシステムです。メッセージを送る Producer、メッセージをためておく Broker、メッセージを受け取る Consumer という構成をとる RabbitMQ や ActiveMQ のようなメッセージングシステムですが、複数のサーバーインスタンスによる分散構成をとれる点も特徴で、特に大量のメッセージを扱うための速度性能、スケーラビリティ、耐障害性などに特化していると言われています。
今回は公式ページのクイックスタートを参考に、Kafka サーバーの構築とメッセージングについて試してみました。
Kafka をインストールする
まず前提として、Java が使えるようインストールしておきます。
java コマンドを叩いて動いていれば大丈夫です。$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
Kafka 公式ページからリンクされているダウンロードページから、Kafka の最新版をダウンロードします。$ wget http://ftp.riken.jp/net/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz
ダウンロードしたら、アーカイブを展開して適当なディレクトリに置いておきます。$ tar xvfz kafka_2.11-2.0.0.tgz
# mv kafka_2.11-2.0.0 /usr/local/
# ln -s /usr/local/kafka_2.11-2.0.0 /usr/local/kafka
続きを読む
Kafka
コメント (0) 2018/08/16 20:03:53