學習Kafka,掌握Kafka的單機部署是理解其分布式特性的第一步。本文將手把手帶你完成Kafka單機環境的安裝、配置及基礎驗證,涵蓋常見問題排查技巧。
1 環境準備
1.1 系統要求
- 操作系統:CentOS 7.9
- 依賴組件:JDK 8+(Kafka 2.8+需要JDK11+)、ZooKeeper(Kafka 2.8+內置ZooKeeper,可跳過獨立安裝)
- 資源建議:至少2核CPU,4GB內存,磁盤空間 ≥ 10GB(日志保留默認7天)
# 檢查Java版本(示例為CentOS)
[root@node6 kafka]# java -version
java version "11.0.25" 2024-10-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.25+9-LTS-256)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.25+9-LTS-256, mixed mode)
[root@node6 kafka]#
2 安裝Kafka
2.1 下載與解壓
下載地址: Index of /dist/kafka/3.6.0
tar -zxvf kafka_2.13-3.6.0.tgz -C /export/home/kafka/
2.2 目錄結構說明
[root@node6 kafka_2.13-3.6.0]# tree -L 1
.
├── bin/ # 【核心】Kafka 管理腳本(啟動/停止/運維)
├── config/ # 【核心】配置文件(服務端、客戶端、ZooKeeper)
├── libs/ # 【核心】Kafka 運行依賴的 Java 庫(JAR 文件)
├── logs/ # 【運行時生成】日志文件(服務啟動后自動生成)
├── licenses/ # 第三方依賴的許可證文件
├── site-docs/ # HTML 格式的官方文檔(本地版)
├── LICENSE # Apache 2.0 許可證文件
└── NOTICE # 項目版權聲明文件6 directories, 2 files
[root@node6 kafka_2.13-3.6.0]#
3 配置Kafka
3.1 單機模式配置
# 編輯config/server.properties核心參數:備份文件并添加如下內容
cp config/server.properties config/server.properties_bak
cat >config/server.properties<<EOF
# Broker唯一ID(單機保持默認即可)
broker.id=0# 監聽地址(重要!改成實際IP或0.0.0.0)
listeners=PLAINTEXT://192.168.10.35:9092# 日志存儲目錄(確保有寫入權限)
log.dirs=/export/home/kafka/kafka_2.13-3.6.0/logs# ZooKeeper連接地址(單機默認)
zookeeper.connect=localhost:2181# 每個Topic的默認分區數(根據需求調整)
num.partitions=1# 日志保留時間(小時)
log.retention.hours=168# 單個日志段最大大小(默認1GB)
log.segment.bytes=1073741824# 網絡線程數(建議CPU核數)
num.network.threads=2# IO線程數(建議2*CPU核數)
num.io.threads=4
EOF
3.2 啟動內置ZooKeeper
# 啟動內置ZooKeeper(前臺運行,觀察日志)
/export/home/kafka/kafka_2.13-3.6.0/bin/zookeeper-server-start.sh /export/home/kafka/kafka_2.13-3.6.0/config/zookeeper.properties# 新終端窗口啟動Kafka
/export/home/kafka/kafka_2.13-3.6.0/bin/kafka-server-start.sh /export/home/kafka/kafka_2.13-3.6.0/config/server.properties
4 驗證服務
4.1 創建Topic
# 創建名為test的Topic,1分區1副本
/export/home/kafka/kafka_2.13-3.6.0/bin/kafka-topics.sh --create \--bootstrap-server 192.168.10.35:9092 \--replication-factor 1 \--partitions 1 \--topic testLast login: Thu Apr 3 21:54:04 2025 from 192.168.10.2
[root@node6 ~]# /export/home/kafka/kafka_2.13-3.6.0/bin/kafka-topics.sh --create \
> --bootstrap-server 192.168.10.35:9092 \
> --replication-factor 1 \
> --partitions 1 \
> --topic test
Created topic test.
[root@node6 ~]# # 查看Topic詳情
/export/home/kafka/kafka_2.13-3.6.0/bin/kafka-topics.sh --describe --topic test --bootstrap-server 192.168.10.35:9092[root@node6 ~]# /export/home/kafka/kafka_2.13-3.6.0/bin/kafka-topics.sh --describe --topic test --bootstrap-server 192.168.10.35:9092
Topic: test TopicId: ripsPks_T2Od3POsa7e5LQ PartitionCount: 1 ReplicationFactor: 1 Configs: segment.bytes=1073741824Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
[root@node6 ~]#
4.2 生產與消費消息
# 啟動生產者(輸入消息后按Ctrl+C退出)
/export/home/kafka/kafka_2.13-3.6.0/bin/kafka-console-producer.sh \--bootstrap-server 192.168.10.35:9092 \--topic test# 新終端啟動消費者(從頭開始消費)
/export/home/kafka/kafka_2.13-3.6.0/bin/kafka-console-consumer.sh \--bootstrap-server 192.168.10.35:9092 \--topic test \--from-beginning
5 常見問題排查
5.1. 端口沖突
- 錯誤現象:Address already in use
- 解決方案
# 檢查端口占用
netstat -tulnp | grep 9092
# 終止沖突進程或修改Kafka監聽端口
5.2 磁盤空間不足
- 日志清理
# 手動刪除舊日志(謹慎操作!)
rm -rf /export/home/kafka/kafka_2.13-3.6.0/logs/test-0/*
# 或配置自動清理(server.properties)
log.retention.hours=168 # 保留7天
5.3 ZooKeeper連接失敗
- 檢查ZK狀態
netstat -tulnp | grep 2181