做好Ubuntu Kafka配置的完整指南
sudo apt update && sudo apt install -y openjdk-8-jdk
java -version # 驗證安裝,需顯示Java版本信息
wget https://mirrors.estointernet.in/apache/zookeeper/zookeeper-3.6.3/zookeeper-3.6.3.tar.gz
tar -xzvf zookeeper-3.6.3.tar.gz
sudo mv zookeeper-3.6.3 /opt/zookeeper
/opt/zookeeper/conf/zoo.cfg
文件,添加以下內容:tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
sudo mkdir -p /var/lib/zookeeper
sudo chown -R $(whoami):$(whoami) /opt/zookeeper /var/lib/zookeeper # 授權當前用戶
sudo /opt/zookeeper/bin/zkServer.sh start # 啟動服務
sudo netstat -plnt | grep 2181 # 驗證端口是否監聽
編輯Kafka配置文件(/opt/kafka/config/server.properties
),調整以下關鍵參數:
broker.id
:集群中每個Broker的唯一ID(如0、1、2),必須唯一。listeners
:指定Broker監聽的地址與端口(如PLAINTEXT://your_server_ip:9092
,若需遠程訪問需替換localhost
為服務器IP)。log.dirs
:Kafka日志存儲目錄(如/var/lib/kafka
),需提前創建并授權(sudo mkdir -p /var/lib/kafka && sudo chown -R kafka:kafka /var/lib/kafka
)。zookeeper.connect
:Zookeeper集群地址(如localhost:2181
,多節點用逗號分隔)。num.partitions
:新Topic的默認分區數(建議根據消費者數量設置,至少大于消費者數)。default.replication.factor
:Topic副本因子(生產環境建議設為3,確保數據冗余)。/opt/kafka/bin/kafka-server-start.sh
),設置堆內存大?。ǜ鶕掌鲀却嬲{整,如4GB內存可設為-Xmx4G -Xms4G
):export KAFKA_HEAP_OPTS="-Xmx4G -Xms4G"
可選:啟用G1垃圾回收器(減少GC停頓):export KAFKA_JVM_PERFORMANCE_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=20"
num.network.threads
:處理網絡請求的線程數,默認3,高并發場景可增至8)。num.io.threads
:處理磁盤讀寫的線程數,默認8,高負載場景可增至16)。socket.receive.buffer.bytes
:默認100KB,可增至1MB)。linger.ms
:默認0ms,可增至5-10ms)、啟用壓縮(compression.type
:如gzip
,減少網絡帶寬占用)。fetch.min.bytes
:默認1B,可增至1MB)、延長拉取等待時間(fetch.max.wait.ms
:默認500ms,可增至1s),減少網絡請求次數。ulimit -n 65536
永久調整:編輯/etc/security/limits.conf
,添加以下內容:* soft nofile 65536
* hard nofile 65536
/etc/sysctl.conf
,添加以下內容優化網絡性能:net.core.somaxconn=1024 # 增加TCP連接隊列長度
net.ipv4.tcp_max_syn_backlog=8192 # 增加SYN隊列長度
net.ipv4.tcp_tw_reuse=1 # 允許復用TIME-WAIT狀態的連接
執行sudo sysctl -p
使配置生效。/etc/systemd/system/zookeeper.service
):[Unit]
Description=Zookeeper Service
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
User=zookeeper
Group=zookeeper
Restart=always
[Install]
WantedBy=multi-user.target
/etc/systemd/system/kafka.service
):[Unit]
Description=Apache Kafka Server
After=zookeeper.service
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
User=kafka
Group=kafka
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable zookeeper kafka
sudo systemctl start zookeeper kafka
ps -ef | grep kafka
(應顯示Kafka主進程)。netstat -plnt | grep 9092
(應顯示9092端口監聽)。test
,分區1,副本1):/opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
/opt/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
jconsole
查看)。log.retention.hours
:默認168小時,即7天,可根據需求調整),定期清理舊日志。/var/lib/zookeeper
)和Kafka日志目錄(/var/lib/kafka
),防止數據丟失。