Debian Kafka集群擴容操作步驟
kafka-topics.sh --bootstrap-server <現有節點IP>:9092 --describe
查看主題狀態,確保無under-replicated分區;zkServer.sh status
檢查所有節點狀態是否為“leading”或“following”。/opt/kafka
):cd /opt
wget https://downloads.apache.org/kafka/3.5.2/kafka_2.12-3.5.2.tgz
tar -xzf kafka_2.12-3.5.2.tgz
mv kafka_2.12-3.5.2 kafka-new
/opt/kafka-new/config
),編輯server.properties
,設置以下關鍵參數:
broker.id
:唯一標識(現有集群中所有Broker的ID不得重復,如現有最大ID為2,新節點設為3);listeners
:指定Broker監聽地址(如PLAINTEXT://<新節點IP>:9092
,確??蛻舳丝稍L問);log.dirs
:消息日志存儲目錄(如/opt/kafka-new/logs
,需提前創建并賦予權限chown -R kafka:kafka /opt/kafka-new
);zookeeper.connect
:現有ZooKeeper集群連接字符串(如node1:2181,node2:2181,node3:2181
,需與現有集群配置一致);advertised.listeners
:對外暴露的Broker地址(如PLAINTEXT://<公網IP>:9092
,確??蛻舳四芡ㄟ^該地址連接)。log.retention.hours
、num.partitions
)有更新,需將新配置同步至新節點,避免后續問題。/opt/kafka-new/bin/kafka-server-start.sh /opt/kafka-new/config/server.properties &
使用ps -ef | grep kafka
確認進程是否運行,若進程存在則表示啟動成功。/opt/kafka-new/bin/zookeeper-shell.sh node1:2181 ls /brokers/ids
輸出應包含新節點的broker.id
(如[0,1,2,3]
),表示新節點已成功加入集群。/opt/kafka-new/bin/kafka-topics.sh --bootstrap-server <新節點IP>:9092 --describe
若能正常列出主題信息,則說明新節點可正常提供服務。擴容后,新節點未分配現有分區的副本,需通過分區重分配將現有分區的副本遷移到新節點,實現負載均衡。步驟如下:
topics-to-move.json
),指定需要遷移的主題(或所有主題):{"topics": [{"topic": "my_topic", "partitions": ["0", "1", "2"]}], "version": 1}
或遷移所有主題:{"topics": [{"topic": "*", "partitions": ["0", "1", "2"]}], "version": 1}
執行以下命令生成重分配計劃(--broker-list
為新節點ID,如3
):/opt/kafka-new/bin/kafka-reassign-partitions.sh --bootstrap-server <現有節點IP>:9092 \
--topics-to-move-json-file topics-to-move.json \
--broker-list "3" \
--generate
輸出會顯示建議的重分配方案(如將my_topic
的副本從[0,1,2]
調整為[0,1,3]
)。reassignment.json
(如上述輸出),執行以下命令開始遷移:/opt/kafka-new/bin/kafka-reassign-partitions.sh --bootstrap-server <現有節點IP>:9092 \
--reassignment-json-file reassignment.json \
--execute
此時,Kafka會自動將指定分區的副本遷移到新節點。/opt/kafka-new/bin/kafka-reassign-partitions.sh --bootstrap-server <現有節點IP>:9092 \
--reassignment-json-file reassignment.json \
--verify
輸出示例:{"partitions": [{"topic": "my_topic", "partition": 0, "status": "completed"}, ...]}, "version": 1}
所有分區狀態為“completed”則表示遷移完成。kafka-consumer-groups.sh
查看消費者滯后)或第三方工具(如Prometheus+Grafana)監控集群的CPU、內存、磁盤使用率及消息吞吐量,確保新節點負載均衡。server.properties
):
num.network.threads
:網絡線程數(默認3,高負載時可調整為8);num.io.threads
:I/O線程數(默認8,高負載時可調整為16);log.flush.interval.messages
:消息刷盤間隔(默認10000,低延遲場景可調整為1000)。