目次
1. 飼育員クラスターの構築
クラスターの高可用性を確保するには、Zookeeper クラスター内に奇数のノード (少なくとも 3 つのノード) を配置することが最適であるため、ここでは 3 ノードのクラスターが構築されます。
1.1 ダウンロードと解凍
Zookeeper の対応するバージョンをダウンロードします。ここでダウンロードしたバージョンは 3.4.14 です。公式ダウンロードアドレス: https://archive.apache.org/dist/zookeeper/
# 下载
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
# 解压
tar -zxvf zookeeper-3.4.14.tar.gz
1.2 構成の変更
Zookeeper インストール パッケージのコピーを 3 つコピーします。インストールディレクトリのconfディレクトリに移動し、設定サンプルzoo_sample.cfgをzoo.cfgにコピーして修正すると、修正後の3つの設定ファイルの内容は以下のようになります。
zookeeper01 配置:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-cluster/data/01
dataLogDir=/usr/local/zookeeper-cluster/log/01
clientPort=2181
# server.1 这个1是服务器的标识,可以是任意有效数字,标识这是第几个服务器节点,这个标识要写到dataDir目录下面myid文件里
# 指名集群间通讯端口和选举端口
server.1=host1:2287:3387
server.2=host2:2287:3387
server.3=host3:2287:3387
複数のサーバーがある場合、クラスター内の各ノードの通信ポートと選択ポートを同じにすることができ、IP アドレスを各ノードが配置されているホストの IP に変更できます。
zookeeper02 の設定は、zookeeper01 と比較して、dataDir、dataLogDir、clientPort のみが異なります。
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-cluster/data/02
dataLogDir=/usr/local/zookeeper-cluster/log/02
clientPort=2181
server.1=host1:2287:3387
server.2=host2:2287:3387
server.3=host3:2287:3387
Zookeeper03 の構成は、zookeeper01、02 と比較して、dataLogDir、dataLogDir、および clientPort のみが異なります。
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-cluster/data/03
dataLogDir=/usr/local/zookeeper-cluster/log/03
clientPort=2181
server.1=host1:2287:3387
server.2=host2:2287:3387
server.3=host3:2287:3387
構成パラメータの説明:
1.3 ノードの識別
3 つのノードのデータ格納ディレクトリにそれぞれ新しい myid ファイルを作成し、対応するノード識別子を書き込みます。Zookeeper クラスターは、myid ファイルを通じてクラスター ノードを識別し、上で構成されたノード通信ポートおよび選出ポートを通じてノードと通信し、リーダー ノードを選出します。
ストレージディレクトリを作成します。
# dataDir
mkdir -vp /usr/local/zookeeper-cluster/data/01
# dataDir
mkdir -vp /usr/local/zookeeper-cluster/data/02
# dataDir
mkdir -vp /usr/local/zookeeper-cluster/data/03
ノード ID を作成して myid ファイルに書き込みます。
#server1
echo "1" > /usr/local/zookeeper-cluster/data/01/myid
#server2
echo "2" > /usr/local/zookeeper-cluster/data/02/myid
#server3
echo "3" > /usr/local/zookeeper-cluster/data/03/myid
1.4 クラスタの起動
3 つのノードをそれぞれ起動します。
# 启动节点
/usr/app/zookeeper-cluster/bin/zkServer.sh start
1.5 クラスターの検証
jps を使用してプロセスを表示し、zkServer.sh status を使用してクラスター内の各ノードのステータスを表示します。図に示すように、3 つのノードのプロセスはすべて正常に開始され、2 つのノードがフォロワー ノード、1 つのノードがリーダー ノードになります。
2. Kafkaクラスタの構築
2.1 ダウンロードと解凍
Kafka インストール パッケージの公式ダウンロード アドレス: http://kafka.apache.org/downloads この使用例でダウンロードされるバージョンは 2.2.0 です。ダウンロード コマンド:
# 下载
wget https://www-eu.apache.org/dist/kafka/2.2.0/kafka_2.12-2.2.0.tgz
# 解压
tar -xzf kafka_2.12-2.2.0.tgz
kafka_2.12-2.2.0.tgz を例として、最初の 2.12 は Scala のバージョン番号 (Kafka は Scala 言語を使用して開発されています) を表し、次の 2.2 は Kafka インストール パッケージの命名規則の説明です。 0 は Kafka のバージョンを表します。
2.2 設定ファイルのコピー
解凍したディレクトリの config ディレクトリに移動し、3 つの構成ファイルをコピーします。
cp server.properties server.properties
2.3 構成の変更
次のように、3 つの構成ファイルの一部の構成をそれぞれ変更します。
サーバー-1:
# The id of the broker. 集群中每个节点的唯一标识
broker.id=0
# 监听地址
listeners=PLAINTEXT://hostname1:9092
# 数据的存储位置
log.dirs=/usr/local/kafka/logs
# Zookeeper连接地址
zookeeper.connect=hostname1:2181,hostname2:2181,hostname3:2181
サーバー-2:
broker.id=1
listeners=PLAINTEXT://hostname2:9094
log.dirs=/usr/local/kafka/logs
zookeeper.connect=hostname1:2181,hostname2:2181,hostname3:2181
サーバー-3:
broker.id=2
listeners=PLAINTEXT://hostname3:9094
log.dirs=/usr/local/kafka/logs
zookeeper.connect=hostname1:2181,hostname2:2181,hostname3:2181
ここで説明が必要なのは、log.dirs はデータログの保存場所であり、正確にはパーティションデータの保存場所であり、プログラムの実行ログの場所ではありません。プログラム実行ログの場所は、同じディレクトリ内の log4j.properties によって構成されます。
2.4 クラスタの起動
異なる構成ファイルを指定して、3 つの Kafka ノードを起動します。起動後、jps を使用してプロセスを表示すると、Zookeeper プロセスが 3 つ、kafka プロセスが 3 つあるはずです。
bin/kafka-server-start.sh config/server.properties
2.5 テストトピックの作成
テスト トピックを作成します。
bin/kafka-topics.sh --create --bootstrap-server kubemaster01.xltest.sz.xunlei.com:9092 \
--replication-factor 3 \
--partitions 1 --topic my-first-topic
作成後、次のコマンドを使用して、作成されたトピック情報を表示できます。
bin/kafka-topics.sh --describe --bootstrap-server kubemaster01.xltest.sz.xunlei.com:9092 --topic my-first-topic
パーティション 0 には 3 つのレプリカ 0、1、2 があり、3 つすべてのレプリカが使用可能なレプリカであり、ISR (同期レプリカ) リストに含まれていることがわかります。1 はリーダー レプリカです。ビルドは成功しました。
2.6 データ書き込みテスト
kubemaster01 からデータを書き込みます。
bin/kafka-console-producer.sh --broker-list kubemaster01.xltest.sz.xunlei.com:9092 --topic my-first-topic
kubenode01 からデータを取得します。
bin/kafka-console-consumer.sh --bootstrap-server kubenode01.xltest.sz.xunlei.com:9092 --from-beginning --topic my-first-topic