安裝Java環境
Kafka依賴Java運行,推薦使用OpenJDK 11及以上版本:
sudo apt update && sudo apt install openjdk-11-jdk -y
java -version # 驗證安裝(需顯示11.x版本)
安裝Zookeeper
Kafka需Zookeeper管理集群元數據,建議使用獨立節點或Kafka內置的KRaft模式(新版本推薦):
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
tar -xzvf apache-zookeeper-3.7.0-bin.tar.gz
sudo mv apache-zookeeper-3.7.0 /opt/zookeeper
# 配置zoo.cfg(/opt/zookeeper/conf/zoo.cfg)
echo "dataDir=/opt/zookeeper/data
clientPort=2181" | sudo tee /opt/zookeeper/conf/zoo.cfg
/opt/zookeeper/bin/zkServer.sh start # 啟動Zookeeper
下載并解壓Kafka
從官網下載最新穩定版(如3.7.0),解壓至指定目錄:
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzvf kafka_2.13-3.7.0.tgz
sudo mv kafka_2.13-3.7.0 /opt/kafka
分區與并行處理
增加分區數(num.partitions)以提升并行處理能力,建議設置為消費者線程數的1.5~2倍:
num.partitions=8 # 根據業務需求調整
線程池優化
調整網絡I/O線程(num.network.threads)和磁盤I/O線程(num.io.threads),匹配服務器CPU核心數:
num.network.threads=8 # 建議為CPU核心數的1~1.5倍
num.io.threads=16 # 建議為CPU核心數的2倍(Kafka依賴順序I/O)
日志管理
log.segment.bytes=1073741824 # 1GB(默認1GB,可根據磁盤容量調整)
log.retention.hours),避免磁盤空間浪費:log.retention.hours=168 # 7天(根據數據重要性調整)
壓縮與批量處理
啟用壓縮(compression.type)減少網絡傳輸量,調整生產者批處理參數(batch.size、linger.ms)提升吞吐量:
compression.type=lz4 # 推薦LZ4(低延遲)或Snappy(高吞吐)
batch.size=1048576 # 1MB(增大批處理大小,減少請求次數)
linger.ms=100 # 等待100ms再發送,合并更多消息
compression.type=lz4 # 啟用壓縮
acks=all # 確保數據可靠性(所有副本確認)
buffer.memory=33554432 # 32MB(增加生產者緩沖區大?。?/span>
fetch.min.bytes=1048576 # 1MB(每次拉取最小數據量,減少請求次數)
fetch.max.wait.ms=1000 # 最多等待1秒,平衡延遲與吞吐
max.poll.records=200 # 每次poll最多拉取200條(避免內存溢出)
group.initial.rebalance.delay.ms=3000 # 消費者組初始再平衡延遲3秒
文件描述符限制
Kafka需處理大量并發連接,需增大文件描述符限制:
echo "* soft nofile 100000
* hard nofile 100000" | sudo tee -a /etc/security/limits.conf
ulimit -n 100000 # 立即生效
內核參數優化
調整TCP/IP堆棧和虛擬內存參數,提升網絡與I/O性能:
# 增加TCP緩沖區大小
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
# 啟用TCP快速回收
sysctl -w net.ipv4.tcp_tw_reuse=1
# 減少SWAP使用(Kafka依賴內存)
sysctl -w vm.swappiness=1
# 增加系統最大映射地址空間
sysctl -w vm.max_map_count=262144
# 永久生效:將上述命令添加至/etc/sysctl.conf
掛載選項優化
若使用SSD,修改掛載選項以提升性能(如noatime禁用訪問時間更新):
sudo mount -o remount,noatime /opt/kafka/logs # 替換為實際日志目錄
-Xms8G -Xmx8G,避免超過物理內存的70%)。監控工具
使用Prometheus+Grafana監控Kafka集群的關鍵指標(如UnderReplicatedPartitions未同步分區數、RequestQueueTimeMs請求隊列時間、BytesInPerSec網絡入流量),及時發現性能瓶頸。
日志管理
配置日志輪轉(如logrotate),避免日志文件過大占用磁盤空間:
sudo nano /etc/logrotate.d/kafka
# 添加以下內容
/opt/kafka/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
}
定期維護
df -h),確保剩余空間大于20%。kafka-log-dirs工具或調整log.retention.hours)。通過以上配置,可在Ubuntu環境下充分發揮Kafka的高吞吐、低延遲特性,滿足大規模分布式數據處理需求。需根據實際業務場景(如數據量、并發量)調整參數,并通過監控工具持續優化。