文鳥大好きエンジニアのガラクタ置き場

文鳥さんに日々癒されているエンジニアが業務で直面したものについてまとめていく…予定。

Kafka クラスタを構築してみる

前回は Mac OS X 上に Kafka の実行環境を構築することをやってみました。

ponteru.hatenablog.com

今回は少し発展させてクラスタ構築を行ってみようと思います。

(今回は2台の Broker によって構成されるクラスタを構築しようと思います)

前準備

前回の記事を参考にバイナリのダウンロードし、展開しておきましょう。

設定ファイルの作成

各 Broker に使用する設定ファイルを作成していきます (broker.id 以外全て同じ内容になっています) 。

$ vim config/server.properties
# 変更箇所の抜粋
broker.id=1 # 1台目の Kafka には1、2台目の Kafka には2を割り当てました
log.dirs=/var/kafka-logs # データを保管するディレクトリの指定 (指定したディレクトリがない場合は作成しておきましょう)
zookeeper.connect=zk001.ponteru1:2181 # ZooKeeperの接続先を設定

ZooKeeper のクラスタ構築に関しては以下の記事を参考にしてください。

ponteru.hatenablog.com

動作確認

クラスタの起動

それでは実際に起動してみてクラスタが構成されているか確認してみようと思います。

前回の記事で紹介した起動コマンドを全 Broker で実行します。

$ bin/kafka-server-start.sh config/server.properties

Topicの作成 & 確認

今回は Broker が2台なので replication factor を2にして Topic を作成したいと思います。

$ bin/kafka-topics.sh --create --zookeeper zk001.ponteru:2181 --replication-factor 2 --partitions 1 --topic sample-topic

Topic の作成がうまくいったらリーダーとレプリカの確認をしてみましょう。

$ bin/kafka-topics.sh --describe --zookeeper zk001.ponteru:2181 --topic sample-topic

上記のコマンドを実行すると以下の内容が取得できます。

変数名 説明
Leader リーダーとして選出されている Broker の broker.id
Replicas レプリケーションが行われる Broker のリスト (ノードの死活は関係なく表示される)
Isr In-sync replicas の略 (Broker が生存 & リーダーと同期が取れている)

実際の実行結果は以下のとおり。

$ bin/kafka-topics.sh --describe --zookeeper zk001.ponteru:2181 --topic sample-topic
Topic:sample-topic   PartitionCount:1    ReplicationFactor:2 Configs:
    Topic: sample-topic  Partition: 0    Leader: 1   Replicas: 1,2   Isr: 1,2

上記の結果から broker.id=1 の Broker がリーダーとなっていることが分かりました。

リーダーを落としてみる

リーダーの選出が行われていることが確認できたので、リーダーを落とした場合 broker.id=2 の Broker にリーダー権限が移るか確認してみましょう。

# とりあえず stop してみる。
$ bin/kafka-server-stop.sh

# Kafka プロセスが表示されないことを確認
$ sudo jps | grep Kafka

リーダーが停止したことを確認できたら、先ほど実行したコマンドを再度実行してリーダーが変わっているか確認してます。

$ bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic sample-topic
Topic:sample-topic   PartitionCount:1    ReplicationFactor:2 Configs:
    Topic: sample-topic  Partition: 0    Leader: 2   Replicas: 1,2   Isr: 2

リーダーが broker.id=2 の Broker になっていること、in-sync replicas から borker.id=1 の Broker がいなくなっていることから、問題なくリーダーが変更されたことが分かりました。

まとめ

今回は Kafka のクラスタを構築してみました。

簡単にクラスタを構築することができるので個人的にクラスタ構築をして色々と検証を行うこともできると思います。

ぜひ Kafka クラスタを構築して遊んでみましょう!