Kafka依賴Java運行環境,需安裝OpenJDK 8或更高版本(推薦Java 11)。執行以下命令安裝并驗證:
sudo yum install -y java-11-openjdk-devel # 安裝Java 11
java -version # 驗證安裝(需顯示Java版本信息)
從Apache官網下載最新穩定版Kafka(如3.5.2),解壓至指定目錄(如/usr/local/kafka
):
wget https://downloads.apache.org/kafka/3.5.2/kafka_2.12-3.5.2.tgz # 下載Kafka
tar -xzf kafka_2.12-3.5.2.tgz -C /usr/local/ # 解壓
sudo mv /usr/local/kafka_2.12-3.5.2 /usr/local/kafka # 重命名目錄
Kafka需通過Zookeeper實現集群管理和元數據存儲。編輯Zookeeper配置文件(/usr/local/kafka/config/zookeeper.properties
),設置集群模式(單節點示例):
dataDir=/usr/local/kafka/zookeeper_data # 數據存儲目錄
clientPort=2181 # 客戶端連接端口
initLimit=5 # Leader與Follower初始同步時間
syncLimit=2 # Leader與Follower同步超時時間
server.1=localhost:2888:3888 # 集群節點配置(單節點可省略)
啟動Zookeeper服務:
nohup /usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties > /dev/null 2>&1 &
Kafka的核心配置文件為/usr/local/kafka/config/server.properties
,需調整以下關鍵參數:
broker.id=0 # 集群中每個Broker的唯一ID(0~255),多Broker需不同
listeners=PLAINTEXT://0.0.0.0:9092 # 監聽所有網絡接口的9092端口
advertised.listeners=PLAINTEXT://your_server_ip:9092 # 客戶端連接的地址(替換為服務器公網/內網IP)
log.dirs=/usr/local/kafka/kafka_logs # 日志存儲目錄(建議使用獨立磁盤,多目錄用逗號分隔)
zookeeper.connect=localhost:2181 # 單節點Zookeeper;多節點用逗號分隔(如zk1:2181,zk2:2181,zk3:2181)
num.partitions=8 # Topic默認分區數(根據業務吞吐量調整,建議≥3)
default.replication.factor=3 # Topic默認副本因子(≥2,生產環境建議3)
min.insync.replicas=2 # 寫操作需確認的最小副本數(≤default.replication.factor,保證數據持久性)
log.retention.hours=168 # 日志保留時間(小時,默認7天,可根據需求調整為24小時或更長)
log.segment.bytes=1073741824 # 日志段大?。?GB,建議1~10GB,過大影響刪除效率)
log.retention.check.interval.ms=300000 # 日志檢查間隔(5分鐘)
num.network.threads=3 # 網絡請求處理線程數(建議≥3,根據CPU核心數調整)
num.io.threads=8 # 磁盤I/O線程數(建議≥8,根據磁盤數量和性能調整)
socket.send.buffer.bytes=102400 # 發送緩沖區大?。?00KB,默認100KB)
socket.receive.buffer.bytes=102400 # 接收緩沖區大?。?00KB,默認100KB)
socket.request.max.bytes=104857600 # 請求最大字節數(100MB,默認100MB)
nohup /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties > /dev/null 2>&1 &
創建Systemd服務文件(/etc/systemd/system/kafka.service
),內容如下:
[Unit]
Description=Apache Kafka Server
After=network.target zookeeper.service # 依賴Zookeeper服務
[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
啟用并啟動服務:
sudo systemctl daemon-reload
sudo systemctl enable kafka
sudo systemctl start kafka
/usr/local/kafka/bin/kafka-topics.sh --create \
--bootstrap-server localhost:9092 \
--replication-factor 1 \
--partitions 1 \
--topic test_topic
/usr/local/kafka/bin/kafka-console-producer.sh --topic test_topic --bootstrap-server localhost:9092
輸入消息(如Hello Kafka
)并按回車。
/usr/local/kafka/bin/kafka-console-consumer.sh --topic test_topic --from-beginning --bootstrap-server localhost:9092
應能看到發送的Hello Kafka
消息。
開放Kafka(9092)和Zookeeper(2181)端口:
sudo firewall-cmd --zone=public --add-port=9092/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2181/tcp --permanent
sudo firewall-cmd --reload
log.dirs
),避免機械硬盤。/data1/kafka_logs,/data2/kafka_logs
),提高IO吞吐量。調整Kafka的JVM堆內存(根據服務器內存調整,建議不超過物理內存的70%):
export KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" # 在kafka-server-start.sh前添加
log4j.properties
),避免日志文件過大占用磁盤空間。