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 服務
- 創建服務文件 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
- 修改服務後需要重新加載
sudo systemctl daemon-reload
# 查看Kafka服務狀態
sudo systemctl status kafka