目錄
- 環境準備
- 主機準備
- 補充說明
- JDK安裝 (三臺主機分別執行)
- 下載jdk
- jdk安裝
- kafka 部署(三臺主機分別執行)
- kafka 下載
- kafka 版本號結構解析
- kafka 安裝
- 下載和解壓安裝包(3臺主機都執行)
- 配置 server.properties (KRaft 模式)
- 192.168.37.10
- 192.168.37.11
- 192.168.37.12
- 格式化存儲目錄
- 第一個節點執行
- 三個節點分別執行
- 啟動kafka (3個節點分別執行)
- Kafka 配置為 systemd 服務
- 查看集群控制器狀態
- 注意事項
- 調整 JVM 內存參數
- 在Kraft模式下,Kafka有如下三個配置文件可以配置。
Kafka KRaft 版本(即 Kafka 3.0 及更高版本)使用 KRaft 模式(Kafka Raft 協議)替代 ZooKeeper 進行集群管理,簡化了部署流程。以下是在 Linux 系統上部署 Kafka KRaft 的詳細步驟。
環境準備
主機準備
主機IP | 角色 | 操作系統 |
---|---|---|
192.168.37.10 | broker,controller | Centos 7 |
192.168.37.11 | broker,controller | Centos 7 |
192.168.37.12 | broker,controller | Centos 7 |
補充說明
我們這種,將Broker和Controllers部署一臺的做法,稱為 “組合式”。
同時充當代理和控制器的 Kafka 服務器被稱為 “組合式” 服務器。對于開發環境等小型用例而言,組合式服務器的操作更為簡單。其主要缺點在于,控制器與系統其他部分的隔離性較差。例如,在組合模式下,無法將控制器與代理分開進行滾動升級或擴展。在關鍵的部署環境中,不建議使用組合模式。
JDK安裝 (三臺主機分別執行)
下載jdk
https://www.oracle.com/java/technologies/downloads/?er=221886#java21
jdk安裝
- 解壓下載的文件到指定目錄
tar xvf jdk-21_linux-x64_bin.tar.gz -C /usr/local/
- 設置環境變量 (以 Linux/macOS 為例)
vim /etc/profile
export JAVA_HOME=/usr/local/jdk-21.0.8
export PATH=$JAVA_HOME/bin:$PATH
- 刷新環境變量
source /etc/profile
- 驗證安裝
[root@test-10 bin]# java --version
java 21.0.8 2025-07-15 LTS
Java(TM) SE Runtime Environment (build 21.0.8+12-LTS-250)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.8+12-LTS-250, mixed mode, sharing)
kafka 部署(三臺主機分別執行)
kafka 下載
地址:https://archive.apache.org/dist/kafka/
這里展示了歷史的kafka各個版本。
本次我們下載 kafka_2.13-3.7.0.tgz 這個版本
https://archive.apache.org/dist/kafka/3.7.0/kafka_2.13-3.7.0.tgz
kafka 版本號結構解析
kafka_<SCALA_VERSION>-<KAFKA_VERSION>.tgz
Kafka 是用 Scala 和 Java 開發的,因此需要特定版本的 Scala 編譯。版本號中的 2.13 表示該 Kafka 版本是用 Scala 2.13.x 編譯的
3.7.0 是 Kafka 自身的版本號,采用 MAJOR.MINOR.PATCH 格式
kafka 安裝
下載和解壓安裝包(3臺主機都執行)
mkdir -p /data/middleware
tar xvf kafka_2.13-3.7.0.tgz -C /data/middleware/
配置 server.properties (KRaft 模式)
192.168.37.10
編輯 config/kraft/server.properties 文件:
node.id=1
advertised.listeners=PLAINTEXT://192.168.37.10:9092
controller.listener.names=CONTROLLER
controller.quorum.voters=1@192.168.37.10:9093,2@192.168.37.11:9093,3@192.168.37.12:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
log.dirs=/data/middleware/kafka_2.13-3.7.0/data
192.168.37.11
node.id=2
advertised.listeners=PLAINTEXT://192.168.37.11:9092
controller.listener.names=CONTROLLER
controller.quorum.voters=1@192.168.37.10:9093,2@192.168.37.11:9093,3@192.168.37.12:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
log.dirs=/data/middleware/kafka_2.13-3.7.0/data
192.168.37.12
node.id=3
advertised.listeners=PLAINTEXT://192.168.37.12:9092
controller.listener.names=CONTROLLER
controller.quorum.voters=1@192.168.37.10:9093,2@192.168.37.11:9093,3@192.168.37.12:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
log.dirs=/data/middleware/kafka_2.13-3.7.0/data
格式化存儲目錄
第一個節點執行
Kafka KRaft 模式需要生成一個集群 ID 并配置相關參數:
[root@test-10 kafka_2.13-3.7.0]# ./bin/kafka-storage.sh random-uuid
BJODTrqBTbCBnwSG2VszJg
三個節點分別執行
將生成的 UUID 記錄下來, 使用生成的集群 ID 格式化存儲目錄:
./bin/kafka-storage.sh format -t <YOUR_CLUSTER_ID> -c config/kraft/server.properties
[root@test-10 kafka_2.13-3.7.0]# ./bin/kafka-storage.sh format -t BJODTrqBTbCBnwSG2VszJg -c config/kraft/server.properties
metaPropertiesEnsemble=MetaPropertiesEnsemble(metadataLogDir=Optional.empty, dirs={/data/middleware/kafka_2.13-3.7.0/data: EMPTY})
Formatting /data/middleware/kafka_2.13-3.7.0/data with metadata.version 3.7-IV4.# 執行后,data目錄自動創建,并生成了兩個文件。
[root@test-10 kafka_2.13-3.7.0]# ls data/
bootstrap.checkpoint meta.properties
[root@test-10 kafka_2.13-3.7.0]# cat data/meta.properties
#
#Fri Jul 18 11:25:00 CST 2025
cluster.id=BJODTrqBTbCBnwSG2VszJg
directory.id=YE6-pLr4UPcqstWaKaZJFw
node.id=1
version=1
啟動kafka (3個節點分別執行)
前臺啟動(方便調試)
./bin/kafka-server-start.sh config/kraft/server.properties
后臺啟動
./bin/kafka-server-start.sh -daemon config/kraft/server.properties
Kafka 配置為 systemd 服務
[root@test-10 logs]# systemctl cat kafka
# /etc/systemd/system/kafka.service
[Unit]
Description=Apache Kafka Server (KRaft Mode)
Documentation=https://kafka.apache.org/documentation/
Requires=network.target
After=network.target[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/jdk-21.0.8"
ExecStart=/data/middleware/kafka_2.13-3.7.0/bin/kafka-server-start.sh -daemon /data/middleware/kafka_2.13-3.7.0/config/kraft/server.properties
ExecStop=/data/middleware/kafka_2.13-3.7.0/bin/kafka-server-stop.sh
Restart=on-failure
RestartSec=5
LimitNOFILE=100000[Install]
WantedBy=multi-user.target
重新加載 systemd 并啟動服務
sudo systemctl daemon-reload
sudo systemctl start kafka
sudo systemctl enable kafka # 設置開機自啟
查看集群控制器狀態
注意事項
調整 JVM 內存參數
可以在Service文件中增加
Environment=“KAFKA_HEAP_OPTS=-Xmx4G -Xms4G”
不覆蓋修改,則啟動的JVM參數采用bin/kafka-server-start.sh 默認
在Kraft模式下,Kafka有如下三個配置文件可以配置。
- config/kraft/broker.properties 當節點作為[broker]角色運行時,會去讀該文件中的配置項啟動。
- config/kraft/controller.properties 當節點作為[controller]角色運行時,會去讀該文件中的配置項啟動。
- config/kraft/server.properties 當節點同時作為[broker, controller]角色運行時,會去讀該文件中的配置項啟動。