前言
在生產環境中,akfka集群下的每臺服務器的配置和性能可能不一樣,但Kafka集群只會根據配置規則創建對應的磁區副本,這樣一來可能就會導致個別服務器存盤壓力較大,
在這種情況下,就需要手動調整磁區副本的存盤,我們不妨看看下面的這張圖就明白了

上圖的傳達的意思是:
broker0和broker1所在的服務器配置較高,存盤容量較大,但是broker2和broker3所在的機器配置稍差存盤容量較小,一開始創建出主題之后,集群只會按照默認的配置規則,將leader和follower均勻的分配到不同的節點上去,并不知道具體哪一臺機器的配置如何;
但實際上,我們希望某臺服務器承擔更多的讀寫壓力,這樣的話,就需要事后人為進行手動的對磁區副本的調整
來看看我們的需求
創建一個新的topic,4個磁區,兩個副本,名為three,將 該topic的所有副本都存盤到broker1和broker2兩臺服務器上
前置準備
- centos7服務器,虛擬機或者云服務器
- 提前安裝好kafka集群,并啟動集群,關于集群搭建,可以參考 kafka集群服役新節點
操作步驟
1、創建一個主題,4個磁區,2個副本
./kafka-topics.sh --zookeeper IP:2181 --create --topic three --partitions 4 --replication-factor 2

2、檢查下當前創建的topic情況
./kafka-topics.sh --zookeeper IP:2181 --describe --topic three

從副本的分布情況來看,副本目前盡可能的分布在不同的機器上,而我們的需求是期望所有的資料盡可能存盤在broker1和broker2上面
3、創建副本存盤計劃
這個有點類似于前面的章節中我們講到的服役新節點的操作,在bin目錄下創建一個json檔案,手動指定磁區副本的存盤位置
創建一個名字叫做 increase-replication-factor.json 的檔案,將如下內容拷貝進去,關于下面這段內容,相信大家都能看得懂,實際操作程序中,需要結合自己kafka集群下的機器配置情況合理調整,我這里按照原始需求,假定broker3和broker4的配置稍差,于是將副本盡可能的配置到broker1和broker2上
{
"version":1,
"partitions":[{"topic":"three","partition":0,"replicas":[1,2]},
{"topic":"three","partition":1,"replicas":[1,2]},
{"topic":"three","partition":2,"replicas":[2,1]},
{"topic":"three","partition":3,"replicas":[2,1]}]
}
4、執行存盤計劃
./kafka-reassign-partitions.sh --zookeeper IP:2181 --reassignment-json-file increase-replication-factor.json --execute
看到下面的內容,說明計劃執行完畢,

5、驗證第四步中的執行計劃
./kafka-reassign-partitions.sh --zookeeper IP:2181 --reassignment-json-file increase-replication-factor.json --verify
看到下面的內容,說明副本執行計劃完成執行

6、再次查看副本存盤情況
./kafka-topics.sh --zookeeper IP:2181 --describe --topic three
與第一次的對比,重新分配之后,副本都轉移到了broker1和broker2上面了


通過上面的操作步驟,我們就完成了手動調整磁區副本的需求
增加副本
在生產環境中,假如某個主題重要等級需提升,則可以考慮在現有的基礎上增加副本,副本數的增加需要先制定計劃,然后根據計劃執行,這個和之前的kafka集群服役新節點以及上文調整磁區副本類似
下面來看看具體的操作步驟
1、創建一個新的主題,3個磁區,1個副本
./kafka-topics.sh --zookeeper IP:2181 --create --topic zcy333 --partitions 3 --replication-factor 1

2、查看當前主題的磁區副本存盤情況
./kafka-topics.sh --zookeeper IP:2181 --describe --topic zcy333
從展示情況來看,目前副本只有一個,因此我們的需求是增加副本數量

3、創建副本存盤計劃
所有副本都指定存盤在 broker1、broker2、broker3 中
增加一個increase-replication-factor.json的檔案,將下面的內容拷貝進去
{
"version":1,
"partitions":[
{"topic":"zcy333","partition":0,"replicas":[1,2,3]},
{"topic":"zcy333","partition":1,"replicas":[1,2,3]},
{"topic":"zcy333","partition":2,"replicas":[1,2,3]}
]
}
4、執行副本存盤計劃
./kafka-reassign-partitions.sh --zookeeper IP:2181 --reassignment-json-file increase-replication-factor.json --execute
看到下面的內容,說明執行成功

可以使用下面的命令,驗證執行計劃
./kafka-reassign-partitions.sh --zookeeper IP:2181 --reassignment-json-file increase-replication-factor.json --verify

5、再次查看執行后的主題磁區副本情況
./kafka-topics.sh --zookeeper IP:2181 --describe --topic zcy333
可以對比執行后的情況與執行之前的情況,明顯發現通過上面的操作,針對zcy333這個topic,副本增加了


通過上面的操作,我們成功對現有的topic的副本數進行了增加
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/438668.html
標籤:其他
上一篇:Elasticsearch 集群
下一篇:Flink狀態一致性檢查點
