一、基礎環境準備
安裝Java環境
Kafka依賴Java運行,推薦使用OpenJDK 11(兼容性更好),安裝命令:
sudo apt update && sudo apt install openjdk-11-jdk -y
驗證安裝:java -version(需顯示Java版本信息)。
下載并解壓Kafka
從Apache官網下載最新穩定版本(如3.7.0),解壓至/opt目錄(便于系統管理):
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzf kafka_2.13-3.7.0.tgz -C /opt
sudo mv /opt/kafka_2.13-3.7.0 /opt/kafka
配置Zookeeper
Kafka 2.8+版本仍需Zookeeper管理元數據(后續可升級至Kafka Raft模式),配置步驟:
sudo mkdir -p /opt/zookeeper/data/opt/zookeeper/conf/zoo.cfg,添加:dataDir=/opt/zookeeper/data
clientPort=2181
tickTime=2000
initLimit=10
syncLimit=5
server.0=localhost:2888:3888 # 單機模式無需多節點,但需保留此配置
/opt/zookeeper/bin/zkServer.sh start/opt/zookeeper/bin/zkServer.sh status(需顯示“Mode: standalone”)。二、Kafka Broker核心配置(server.properties)
編輯/opt/kafka/config/server.properties,調整以下關鍵參數:
broker.id=0(集群中唯一,單機模式設為0)。listeners=PLAINTEXT://:9092(本地測試用PLAINTEXT;生產環境建議用SSL/TLS加密)。log.dirs=/opt/kafka/logs(需提前創建,建議使用獨立磁盤,提升I/O性能)。zookeeper.connect=localhost:2181(集群模式需填寫所有Zookeeper節點地址,如host1:2181,host2:2181)。num.network.threads=8(網絡線程數,建議設置為CPU核數的1~2倍)。num.io.threads=16(I/O線程數,建議設置為CPU核數的2~4倍,處理磁盤讀寫)。log.flush.interval.messages=10000(每累積1萬條消息刷盤一次,平衡性能與數據安全性)。log.flush.interval.ms=1000(每1秒刷盤一次,避免頻繁IO)。log.retention.hours=168(日志保留7天,根據業務需求調整,如168小時=7天)。default.replication.factor=1(單機模式設為1;生產環境建議設為3,保證數據冗余)。三、性能優化關鍵措施
操作系統層優化
/etc/fstab,為Kafka日志目錄添加noatime(禁用訪問時間更新,減少寫操作):/dev/sdb1 /opt/kafka ext4 defaults,noatime 0 2
sudo mkfs.xfs /dev/sdb1。swappiness=1(減少內存交換,避免因swap導致的性能下降):echo 'vm.swappiness=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
echo 'vm.dirty_ratio=10' | sudo tee -a /etc/sysctl.conf
echo 'vm.dirty_background_ratio=5' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
JVM層優化
/opt/kafka/bin/kafka-server-start.sh,在exec前添加:export KAFKA_HEAP_OPTS="-Xms6G -Xmx6G"
export KAFKA_JVM_PERFORMANCE_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35"
Kafka Broker參數優化
num.network.threads=6 # 網絡線程數=CPU核數+1
num.io.threads=12 # I/O線程數=CPU核數*2
num.partitions=8),提高并行處理能力;副本因子設為3(default.replication.factor=3),保證數據可靠性。compression.type=lz4),降低帶寬占用。四、開機自啟配置
創建Systemd服務文件
編輯/etc/systemd/system/kafka.service:
[Unit]
Description=Apache Kafka Server
After=network.target zookeeper.service
Requires=zookeeper.service
[Service]
Type=simple
Environment="KAFKA_HOME=/opt/kafka"
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"
ExecStart=${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties
ExecStop=${KAFKA_HOME}/bin/kafka-server-stop.sh
User=kafka
Group=kafka
Restart=on-failure
[Install]
WantedBy=multi-user.target
創建Zookeeper Systemd服務文件
編輯/etc/systemd/system/zookeeper.service:
[Unit]
Description=Apache ZooKeeper Server
After=network.target
[Service]
Type=forking
Environment="ZOOKEEPER_HOME=/opt/zookeeper"
ExecStart=${ZOOKEEPER_HOME}/bin/zkServer.sh start
ExecStop=${ZOOKEEPER_HOME}/bin/zkServer.sh stop
User=zookeeper
Group=zookeeper
Restart=on-failure
[Install]
WantedBy=multi-user.target
啟用并啟動服務
sudo systemctl daemon-reload
sudo systemctl enable zookeeper kafka
sudo systemctl start zookeeper kafka
五、驗證配置
創建Topic
/opt/kafka/bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 8 --replication-factor 1
測試生產與消費
/opt/kafka/bin/kafka-console-producer.sh --topic test --bootstrap-server localhost:9092/opt/kafka/bin/kafka-console-consumer.sh --topic test --bootstrap-server localhost:9092 --from-beginning