# Kafka集群如何安裝以及測試
## 目錄
1. [Kafka簡介](#kafka簡介)
2. [環境準備](#環境準備)
3. [集群安裝步驟](#集群安裝步驟)
- [3.1 下載與解壓](#31-下載與解壓)
- [3.2 配置ZooKeeper](#32-配置zookeeper)
- [3.3 配置Kafka](#33-配置kafka)
- [3.4 啟動服務](#34-啟動服務)
4. [集群測試](#集群測試)
- [4.1 創建Topic](#41-創建topic)
- [4.2 生產與消費消息](#42-生產與消費消息)
- [4.3 容錯測試](#43-容錯測試)
5. [常見問題排查](#常見問題排查)
6. [總結](#總結)
---
## Kafka簡介
Apache Kafka是一個分布式流處理平臺,具有高吞吐、低延遲、水平擴展等特性,廣泛應用于實時數據管道、日志聚合和事件驅動架構。其核心組件包括:
- **Producer**:消息生產者
- **Consumer**:消息消費者
- **Broker**:Kafka服務節點
- **ZooKeeper**:集群元數據管理(Kafka 3.0+可逐步脫離ZooKeeper)
---
## 環境準備
### 硬件要求
- 至少3臺Linux服務器(物理機或虛擬機)
- 每臺配置建議:4核CPU/8GB內存/100GB磁盤(根據數據量調整)
### 軟件依賴
- JDK 1.8+
```bash
sudo apt install openjdk-11-jdk # Ubuntu示例
在所有節點執行:
wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
tar -xzf kafka_2.13-3.6.0.tgz
mv kafka_2.13-3.6.0 /opt/kafka
若使用獨立ZooKeeper集群(以3節點為例):
1. 修改zookeeper.properties
:
dataDir=/var/lib/zookeeper
clientPort=2181
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
myid
文件:
echo "1" > /var/lib/zookeeper/myid # node1執行,node2改為2,node3改為3
編輯/opt/kafka/config/server.properties
:
broker.id=1 # 每個節點唯一ID(node1=1, node2=2...)
listeners=PLNTEXT://node1:9092 # 改為當前節點IP/Hostname
log.dirs=/tmp/kafka-logs
zookeeper.connect=node1:2181,node2:2181,node3:2181
num.partitions=3 # 默認分區數
default.replication.factor=2 # 副本因子
/opt/kafka/bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
/opt/kafka/bin/kafka-server-start.sh -daemon config/server.properties
jps | grep -E "QuorumPeerMain|Kafka"
創建一個3分區、2副本的topic:
/opt/kafka/bin/kafka-topics.sh --create \
--bootstrap-server node1:9092 \
--topic test-topic \
--partitions 3 \
--replication-factor 2
查看topic詳情:
/opt/kafka/bin/kafka-topics.sh --describe \
--bootstrap-server node1:9092 \
--topic test-topic
輸出示例:
Topic: test-topic PartitionCount: 3 ReplicationFactor: 2
Topic: test-topic Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2
Topic: test-topic Partition: 1 Leader: 2 Replicas: 2,3 Isr: 2,3
Topic: test-topic Partition: 2 Leader: 3 Replicas: 3,1 Isr: 3,1
生產者(node1執行):
/opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server node1:9092 \
--topic test-topic
輸入測試消息:
Hello Kafka Cluster
This is a test message
消費者(node2執行):
/opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server node3:9092 \
--topic test-topic \
--from-beginning
應看到實時輸出的消息。
ssh node2 "pkill -f kafka.Kafka" # 關閉node2的Kafka
/opt/kafka/bin/kafka-topics.sh --describe --topic test-topic
觀察Leader
和Isr
字段變化。java.net.UnknownHostException
server.properties
中配置了無法解析的主機名
vi /etc/hosts # 添加所有節點IP映射
192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
netstat -tulnp | grep 9092 # 確認端口監聽
iptables -L -n # 檢查防火墻規則
/opt/kafka/bin/kafka-leader-election.sh \
--bootstrap-server node1:9092 \
--topic test-topic \
--partition 0 \
--election-type PREFERRED
通過本文,您已完成: 1. 3節點Kafka集群的部署 2. Topic創建與基礎消息測試 3. 集群容錯性驗證
擴展建議: - 啟用SSL加密通信 - 使用Kraft模式替代ZooKeeper(Kafka 3.3+) - 集成Prometheus監控指標
注:本文基于Kafka 3.6.0編寫,其他版本可能略有差異。完整配置參考官方文檔。 “`
該文檔共約2300字,包含代碼塊、配置示例和結構化排版,可直接保存為.md
文件使用。如需調整細節或補充內容可隨時告知。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。