1. 程式人生 > >kafka如何擴容伺服器、重新分割槽Partition

kafka如何擴容伺服器、重新分割槽Partition

1. 擴容

在新的物理機上安裝kafka程式,修改config/server.properties檔案裡的broker.id必須在叢集中唯一,修改其他必要的配置項,其中zookeeper.connect配置項,寫上kafka叢集現在使用的zookeeper叢集的地址。
然後啟動kafka就可以加入到叢集中了。
但是新加入的機器只能對新產生的topic起作用,對已有的topic在沒有做處理前,是不會承擔任何任務的,所以不會分擔叢集的壓力。

2. 重新分割槽Partition

假設有一個名為test的topic,只有1個partition,現在由於儲存空間不足,需要重新分割槽。

2.1 修改topic的partitions

./bin/kafka-topics.sh --zookeeper 10.0.210.152:2181 --alter --topic test --partitions 6
現在topic有6個partition,但是資料還沒有遷移過去

2.2 遷移資料

使用kafka提供的工具kafka-reassign-partitions.sh來遷移資料。遷移資料需要分三步做

第一步:生成遷移計劃
先手動生成一個topic.json,內容如下。這裡topic可以是一個列表,

{
"topics": [
{"topic": "test"}
],
"version": 1
}

執行如下語句,

./bin/kafka-reassign-partitions.sh --zookeeper 10.0.210.152:2181 --topics-to-move-json-file topic.json --broker-list "0,1,2,3,4" --generate
將topic.json裡的topic遷移到broker-list列表裡列的broker上,會得到一個執行計劃

Current partition replica assignment
{"version":1,
"partitions":[....]
}
Proposed partition reassignment configuration
{"version"
:1, "partitions":[.....] }

新建一個檔案reassignment.json,儲存上邊這些資訊。其中Current partition replica assignment指當前的分割槽情況,Proposed partition reassignment configuration是計劃的分割槽情況

第二步:遷移
執行如下命令
./bin/kafka-reassign-partitions.sh --zookeeper 10.0.210.152:2181 --reassignment-json-file reassignment.json --execute

第三步:驗證
./bin/kafka-reassign-partitions.sh --zookeeper 10.0.210.152:2181 --reassignment-json-file reassignment.json --verify

3. 其他kafka常用命令

./bin/kafka-console-producer.sh --broker-list 10.0.210.152:9092 --topic test
./bin/kafka-console-consumer.sh --zookeeper 10.0.210.152:2181 --topic test --from-beginning
./bin/kafka-topics.sh --zookeeper 10.0.210.152:2181 --list
./bin/kafka-topics.sh --zookeeper 10.0.210.152:2181 --create --replication-factor 2 --partition 6 --topic test
./bin/kafka-topics.sh --zookeeper 10.0.210.152:2181 --delete --topic test
./bin/kafka-topics.sh --zookeeper 10.0.210.152:2181 --describe --topic test