自己投資の一つとしてチャレンジしている 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 つの機能があります。これらの処理は分散され、スケーラブルで、弾性、高可用性、及びセキュアな環境で実現されます。
- ストリーミングデータ (イベント) を publish (書く) もしくは subscribe (読む) (インポート、エクスポート)
- 指定した期間、イベントを保存する
- イベントを即座に、もしくはさかのぼって処理をすることができる
(参考) 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 kafkabroker32-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.deb2-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.properties2-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_data2-9-2, 今度は Zookeeper ではなく、Kafka Broker の server.properties の設定を行います。
ファイルの場所は、この環境では /home/hadoop/kafka_2.13-3.0.0/config/server.properties となります。
3 つの Broker のサーバーにて、それぞれ server.properties を以下の表に従い値を変更します。
| 設定 | kafkabroker1 | kafkabroker2 | kafkabroker3 |
| broker.id | 0 | 1 | 2 |
| broker.rack | RAC1 | RAC2 | RAC3 |
| log.dirs | /home/hadoop/kafka_data | /home/hadoop/kafka_data | /home/hadoop/kafka_data |
| offsets.topic.num.partitions | 3 | 3 | 3 |
| offsets.topic.replication.factor | 2 | 2 | 2 |
| min.insync.replicas | 2 | 2 | 2 |
| default.replication.factor | 2 | 2 | 2 |
| zookeeper.connect | 10.0.0.1 | 10.0.0.1 | 10.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
以上です。参考になりましたら幸いです。