Apache Kafka インストール 4 ノード (Ubuntu 20.04) No.42

自己投資の一つとしてチャレンジしている Programming の Java の独習状況などを Blog で公開しています。

今回は Apache Kafka で Streaming 処理を実行するための準備として Apache Kafka のクラスターを OS ubuntu 20.04.1 を使って 4 Node で構築してみたいと思います。(In English: Install Apache Kafka 4 nodes No.42)

————————————
▼1. Apache Kafka とは?
————————————
IoT の機器や、センサーから毎秒出力されるストリーミングデータ (イベント) を処理することができます。Kafka には以下の 3 つの機能があります。これらの処理は分散され、スケーラブルで、弾性、高可用性、及びセキュアな環境で実現されます。

  1. ストリーミングデータ (イベント) を publish (書く) もしくは subscribe (読む) (インポート、エクスポート)
  2. 指定した期間、イベントを保存する
  3. イベントを即座に、もしくはさかのぼって処理をすることができる

(参考) Apache Kafka

————————————
▼2. Apache Kafka のインストール
————————————
2-1. 4 台の Ubuntu 20.04.01 LTS x64 を用意します。
1 台は管理サーバーとして Zookeeper Server を用意し、残り 3 台は Kafka Broker サービスを提供するサーバーとして用意します。 いずれも Ubuntu のマシンを利用します。

2-2. 各ノード の hosts ファイルに以下を追加します。すべてのマシンで設定します。

(例) ファイル名: /etc/hosts
xxx
10.0.0.1 zookeeper
10.0.0.2 kafkabroker1
10.0.0.3 kafkabroker2
10.0.0.4 kafkabroker3

2-3. 4 台の Ubuntu に Java 8 JDK のインストールします。
Azure でサポートしている Azul Zulu OpenJDK Java 8 (LTS) を利用します。インストール方法はこちらのサイトを確認ください。Download Azul Zulu Builds of OpenJDK | Azul

例)
sudo apt install ./zulu8.58.0.13-ca-jdk8.0.312-linux_amd64.deb

2-4. 4 台の Ubuntu に Apache Kafka をダウンロードしインストールします。
2021年11月時点の最新の Apache Kafka (Kafka 3.0.0 2.13-3) ダウンロードサイト https://www.apache.org/dyn/closer.cgi?path=/kafka/3.0.0/kafka_2.13-3.0.0.tgz

例)
tar -xzf kafka_2.13-3.0.0.tgz
cd kafka_2.13-3.0.0

2-5. すべてのマシンにて、環境変数の設定を行います。
/home/hadoop/.profile の末尾の PATH の定義を追加します。検証環境は ${HOME} が /home/hadoop となっています。

例)
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/kafka_2.13-3.0.0/bin 

2-6. Zookeeper のマシンのみで、環境変数 zookeeper.properties の設定を行います。

例) 
mkdir /home/hadoop/kafka_data/zookeeper_data
vi $HOME/kafka_2.13-3.0.0/config/zookeeper.properties

xxx
dataDir=/home/hadoop/kafka_data/zookeeper_data 

2-7. Zookeeper のサービスを起動し、エラーなく動作するかを確認します。

/home/hadoop/kafka_2.13-3.0.0/bin/zookeeper-server-start.sh $HOME/kafka_2.13-3.0.0/config/zookeeper.properties

2-8. OS が起動したタイミングで Zookeeper のサービスも自動起動するように設定します。
Zookeeper Server にて rc.loacl の設定をします。

a. rc.local ファイルを空で作成
sudo vi /etc/rc.local

b, rc-local.service に以下を追記
sudo vi /etc/systemd/system/rc-local.service

[Unit]
 Description=/etc/rc.local Compatibility
 ConditionPathExists=/etc/rc.local
[Service]
 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 StandardOutput=tty
 RemainAfterExit=yes
 SysVStartPriority=99
[Install]
 WantedBy=multi-user.target

d. 権限設定
sudo chmod +x /etc/rc.local

e. /etc/rc.local を編集 
printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local

f. exit 0 のコマンドの上に以下を追記
/home/hadoop/kafka_2.13-3.0.0/bin/kafka-server-start.sh /home/hadoop/kafka_2.13-3.0.0/config/server.properties> /dev/null 2>&1 & 

g. rc-local.service を起動
sudo systemctl enable rc-local
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service

h. zookeeper の shell を実行し、zookeeper server が稼働している事を確認します。Kafka broker が存在せず broker id が返ってこない動作は想定通りとなります。
kafka_2.12-2.0.0/bin/zookeeper-shell.sh localhost:2181 ls /brokers/ids

2-9. Configuring Kafka Brokers
2-9-1, 3 台の kafka ノードで kafka_data のフォルダを作成します。

例)
mkdir /home/hadoop/kafka_data

2-9-2, 今度は Zookeeper ではなく、Kafka Broker の server.properties の設定を行います。
ファイルの場所は、この環境では /home/hadoop/kafka_2.13-3.0.0/config/server.properties となります。

3 つの Broker のサーバーにて、それぞれ server.properties を以下の表に従い値を変更します。

設定kafkabroker1 kafkabroker2kafkabroker3
broker.id012
broker.rackRAC1RAC2RAC3
log.dirs/home/hadoop/kafka_data/home/hadoop/kafka_data/home/hadoop/kafka_data
offsets.topic.num.partitions333
offsets.topic.replication.factor222
min.insync.replicas222
default.replication.factor222
zookeeper.connect10.0.0.110.0.0.110.0.0.1
(例)

//kafkabroker1
broker.id=0
broker.rack=RAC1
log.dirs=/home/hadoop/kafka_data
offsets.topic.num.partitions=3
offsets.topic.replication.factor=2
min.insync.replicas=2
default.replication.factor=2
zookeeper.connect=10.0.0.1:2181

//kafkabroker2
broker.id=1
broker.rack=RAC2
log.dirs=/home/hadoop/kafka_data
offsets.topic.num.partitions=3
offsets.topic.replication.factor=2
min.insync.replicas=2
default.replication.factor=2
zookeeper.connect=10.0.0.1:2181

//kafkabroker3
broker.id=2
broker.rack=RAC3
log.dirs=/home/hadoop/kafka_data
offsets.topic.num.partitions=3
offsets.topic.replication.factor=2
min.insync.replicas=2
default.replication.factor=2
zookeeper.connect=10.0.0.1:2181

2-10. Broker Server にて rc.loacl の設定します。 (2-8 と同じ手順)

————————————
▼3. Topic 作成、データの生成、データの読み取りを行ってみます。
————————————

(実行例)
# KAFKA Broker の host 情報を持つ環境変数を作成
export KAFKABROKERS=10.0.0.2:9092,10.0.0.3:9092,10.0.0.4:9092
echo $KAFKABROKERS
(結果)
10.0.0.2:9092,10.0.0.3:9092,10.0.0.4:9092

# KAFKA Zookeeper の host 情報を持つ環境変数を作成
export KAFKAZOOKEEPER=10.0.0.1:2181
echo $KAFKAZOOKEEPER

(結果)
10.0.0.1:2181

# zookeeper の shell を実行し broker id を確認します。
Zookeeper-shell.sh $KAFKAZOOKEEPER ls /brokers/ids
(結果)
Connecting to 10.0.0.1:2181
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[0,1,2]

# test01 の topic を作成します。
kafka-topics.sh --create --replication-factor 3 --partitions 3 --topic test01 --bootstarp-server $KAFKABROKERS

(結果)
Created topic test

# topic のリストを表示します。
kafka-topics.sh --list --bootstrap-server $KAFKABROKERS
(結果)
test

# test の topic の詳細を表示します。
kafka-topics.sh --describe --bootstrap-server $KAFKABROKERS --topic test


(結果)
Topic: test	TopicId: C6c29UKLQXxxXx2G6EmuyA	PartitionCount: 3	ReplicationFactor: 3	Configs: min.insync.replicas=2,segment.bytes=1073741824
	Topic: test	Partition: 0	Leader: 1	Replicas: 1,2,0	Isr: 1,2,0
	Topic: test	Partition: 1	Leader: 2	Replicas: 2,0,1	Isr: 2,0,1
	Topic: test	Partition: 2	Leader: 0	Replicas: 0,1,2	Isr: 0,1,2


# データを生成します。
kafka-console-producer.sh --broker-list $KAFKABROKERS --topic test
(入力)
>1
>2
>3
>a
>b
>c

# 生成したデータを読み取ります。
Kafka-console-consumer.sh --bootstrap-server $KAFKABROKERS --topic test --from-beginning

(出力結果)
1
2
b
c
3
a
Processed a total of 6 messages

————————————
▼4. 参考情報
————————————
(1) Apache Kafka
(2) Installing Multi-node Kafka Cluster – Learning Journal
(3) Apache Kafka/quickstart
(4) How to Enable /etc/rc.local with Systemd – LinuxBabe
(5) Quickstart: Set up Apache Kafka on HDInsight using Azure portal | Microsoft Docs

以上です。参考になりましたら幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です