最新版　Apatch Kafka install for RHEL8

まずは要件の確認

kafkaにアクセス
```https://kafka.apache.org/```

DOWNLOAD KAFKAに移動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629639/ace24a8f-84aa-bba7-5c18-a10226e0bae3.png)


最新版はBinary Downloads:を確認し、"2.13 is recommended:2.13をおすすめ"とかいてある。
今回は2.13のバージョンを利用する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629639/5e5c11a5-daf8-87e0-9c4b-772334de3c20.png)


(重要)要件に▷Apache Kafka supports Java 17◁とあるので、
Java jdk 17のインストールをする。

```Bash
# dnf install java-17-openjdk-devel
```


インストール後、javaのバージョンを確認する。
```Bash
# java -version
```
```Bash
openjdk 17.0.2 2022-01-18 LTS
OpenJDK Runtime Environment 21.9 (build 17.0.2+8-LTS)
OpenJDK 64-Bit Server VM 21.9 (build 17.0.2+8-LTS, mixed mode, sharing)
```


wgetを使用し、URLを貼り付けてkafkaパッケージを/optディレクトリにダウンロードします
```Bash
# wget https://dlcdn.apache.org/kafka/3.1.0/kafka_2.13-3.1.0.tgz -O /opt/kafka_2.13-3.1.0.tgz
```

/optディレクトリに移動し、.tarファイルを展開する。
```Bash
# cd /opt
```
```Bash
# tar -xzf kafka_2.13-3.1.0.tgz
```

シンボリックリンクを作成する
```Bash
# ln -s /opt/kafka_2.13-3.1.0 /opt/kafka
```
zookeeperとkafkaサービスの両方を実行する非特権ユーザーを作成し、所有権の設定をします。
```Bash
# useradd kafka
```
```Bash
# chown -R kafka:kafka /opt/kafka
```


次の内容でユニットファイル/etc/systemd/system/zookeeper.serviceを作成します。
```Bash
vi /etc/systemd/system/zookeeper.service
```
```Bash
[Unit]
Description=zookeeper
After=syslog.target network.target

[Service]
Type=simple

User=kafka
Group=kafka

ExecStart=/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties
ExecStop=/opt/kafka/bin/zookeeper-server-stop.sh

[Install]
WantedBy=multi-user.target
```

Kafkaの次のユニットファイル/etc/systemd/system/kafka.serviceも同様に編集します。
```Bash
vi /etc/systemd/system/kafka.service
```
```Bash
[Unit]
Description=Apache Kafka
Requires=zookeeper.service
After=zookeeper.service

[Service]
Type=simple

User=kafka
Group=kafka

ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh

[Install]
WantedBy=multi-user.target
```

新しいユニットファイルを読み取らせるには、systemdをリロードする。
```Bash
# systemctl daemon-reload
```

次の順序で新しくサービスを起動する。
```Bash
# systemctl start zookeeper
```
```Bash
# systemctl start kafka
```


成功すれば次のコマンドを実行した際、statusがactiveになっている。
```Bash
# systemctl status zookeeper
```
```Bash
● zookeeper.service - zookeeper
   Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor pres>
   Active: active (running) since Thu 2022-04-07 07:37:49 PDT; 1 day 12h ago
 Main PID: 2879 (java)
    Tasks: 38 (limit: 23527)
   Memory: 121.6M
   CGroup: /system.slice/zookeeper.service
           mq2879 java -Xmx512M -Xms512M -server -XX:+UseG1GC -XX:MaxGCPauseMil>
```
```Bash
# systemctl status kafka
```
```Bash
● kafka.service - Apache Kafka
   Loaded: loaded (/etc/systemd/system/kafka.service; disabled; vendor preset: >
   Active: active (running) since Thu 2022-04-07 07:37:49 PDT; 1 day 12h ago
 Main PID: 2880 (java)
    Tasks: 73 (limit: 23527)
   Memory: 710.4M
   CGroup: /system.slice/kafka.service
           mq2880 java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=>
```


that's all

!2025/2/5 追記
必要に迫られ、RHEL9で緩急準備をしたところ、動作をしませんでした。
RHEL10 Betaも同様。
現在、実装可能か確認中です