Kafka_4.1.0(Kraft模式)集羣安裝

環境準備

  • 系統:Ubuntu 22.04
  • JDK:21
  • Kafka: 4.1.0
  • CPU:4核+
  • 內存:8GB+(生產環境建議16GB+)

ip(你自己的集羣IP)

主機名

角色

node id

Broker端口

Controller端口

192.168.8.151

node1

Broker,Controller

1

9092

9093

192.168.8.152

node2

Broker,Controller

2

9092

9093

192.168.8.153

node3

Broker,Controller

3

9092

9093

  • 所有節點既是 Broker 又是 Controller,但進程分離部署
  • 使用 Kafka 內置的 KRaft 模式,不需要 ZooKeeper
  • 所有節點必須能互相訪問。

下載 Kafka

訪問 Apache Kafka 官網,選擇 Binary Downloads,下載 kafka_2.13-4.1.0.tgz(支持 Windows/Linux)。

依賴項

需提前安裝並配置 JAVA_HOME 環境變量。

安裝

將壓縮包解壓至短路徑目錄(如 /opt/kafka/kafka_2.13-4.1.0),進入Kafka目錄

mkdir -p /opt/kafka
tar -zxvf kafka_2.13-4.1.0.tgz
cp -R kafka_2.13-4.1.0 /opt/kafka/
cd /opt/kafka/kafka_2.13-4.1.0

修改 /etc/hosts 文件

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

192.168.8.151 node1
192.168.8.152 node2
192.168.8.153 node3

修改kafka配置文件

打開 config\server.properties,修改以下關鍵參數:

# node1 配置
process.roles=broker,controller
# 節點ID,要求集羣內唯一,每個節點的ID要不一樣
node.id=1
# controller集羣成員列表,集羣內部選舉和同步元數據
controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093

listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
# IP修改為自己的IP
# 偵聽器名稱、主機名和代理將向客户端公佈的端口(broker對外地址)
advertised.listeners=PLAINTEXT://192.168.8.151:9092,CONTROLLER://192.168.8.151:9093

log.dirs=/opt/kafka/kafka-logs
num.partitions=3

# node2 配置
process.roles=broker,controller
# 節點ID,要求集羣內唯一,每個節點的ID要不一樣
node.id=1
# controller集羣成員列表,集羣內部選舉和同步元數據
controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093

listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
# IP修改為自己的IP
# 偵聽器名稱、主機名和代理將向客户端公佈的端口(broker對外地址)
advertised.listeners=PLAINTEXT://192.168.8.152:9092,CONTROLLER://192.168.8.152:9093

log.dirs=/opt/kafka/kafka-logs
num.partitions=3

# node3 配置
process.roles=broker,controller
# 節點ID,要求集羣內唯一,每個節點的ID要不一樣
node.id=1
# controller集羣成員列表,集羣內部選舉和同步元數據
controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093

listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
# IP修改為自己的IP
# 偵聽器名稱、主機名和代理將向客户端公佈的端口(broker對外地址)
advertised.listeners=PLAINTEXT://192.168.8.153:9092,CONTROLLER://192.168.8.153:9093

log.dirs=/opt/kafka/kafka-logs
num.partitions=3

初始化集羣並啓動

cd /opt/kafka/kafka_2.13-4.1.0
# 1. 生成唯一集羣ID(首次啓動執行),三個節點任選一個節點,僅執行一次,在格式化時使用
KAFKA_CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)

# 2. 在每個節點格式化存儲(首次啓動),KAFKA_CLUSTER_ID 取生成的集羣ID
kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/server.properties

# 3. 按順序啓動節點(先啓動控制器節點)
# 節點1
nohup bin/kafka-server-start.sh config/kraft/server.properties &

# 等待10秒後啓動節點2
nohup bin/kafka-server-start.sh config/kraft/server.properties &

# 等待10秒後啓動節點3
nohup bin/kafka-server-start.sh config/kraft/server.properties &

# 4. 等待20s驗證集羣狀態
bin/kafka-broker-api-versions.sh --bootstrap-server 127.0.0.1:9092
bin/kafka-topics.sh --bootstrap-server 192.168.1.101:9092 --list

開機自啓動 Kafka 服務

  1. 創建服務文件 vim /etc/systemd/system/kafka.service
[Unit]
Description=Apache Kafka server (KRaft mode)
Documentation=https://kafka.apache.org/documentation/
After=network.target
 
[Service]
Type=simple
User=charlie
Group=charlie
ExecStart=/opt/kafka/kafka_2.13-4.1.0/bin/kafka-server-start.sh /opt/kafka/kafka_2.13-4.1.0/config/server.properties
ExecStop=/opt/kafka/kafka_2.13-4.1.0/bin/kafka-server-stop.sh
Restart=on-failure
TimeoutStopSec=90
LimitNOFILE=65536
Environment="KAFKA_HEAP_OPTS=-Xmx1G -Xms1G"
 
# 設置 Kafka 日誌輸出(可選)
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=kafka
 
[Install]
WantedBy=multi-user.target
  1. 修改服務後需要重新加載
sudo systemctl daemon-reload

# 查看Kafka服務狀態
sudo systemctl status kafka