寫在前面
假如有一天,你單位業(yè)務(wù)不斷增長(zhǎng)發(fā)財(cái)了。有天老板說(shuō)我們需要增加kafka集群節(jié)點(diǎn),這是怎莫辦?那就新增加一臺(tái)機(jī)器唄!很簡(jiǎn)單我們只需要從已經(jīng)部署好的Kafka節(jié)點(diǎn)中復(fù)制相應(yīng)的配置文件,然后把里面的broker id修改成全局唯一的,最后啟動(dòng)這個(gè)節(jié)點(diǎn)即可將它加入到現(xiàn)有Kafka集群中。
那問(wèn)題也就來(lái)了,我們發(fā)現(xiàn)新的節(jié)點(diǎn)并不能負(fù)載之前的舊數(shù)據(jù),只能對(duì)新增加的Topic進(jìn)行負(fù)載,不能對(duì)舊數(shù)據(jù)進(jìn)行負(fù)載很是浪費(fèi)資源。
這里介紹個(gè)kafka對(duì)分區(qū)重新分配的神器腳本:
kafka-reassign-partitions.sh
一. 分區(qū)重新分配
1.1 指定需要分區(qū)的Topic
- 這里配制成json文件形式
cat topic-partition.json
{
"topics": [
{
"topic":"your topic's name"
}
],
"version":1
}
1.2 生成執(zhí)行計(jì)劃
- 執(zhí)行腳本
kafka-reassign-partitions.sh --zookeeper 你的zookeeperIP:PORT --topics-to-move-json-file topic-partition.json --broker-list "0,1" --generate - 參數(shù)說(shuō)明
--broker-list "0,1"0,1代表kafka節(jié)點(diǎn)的broker.id 包含新舊節(jié)點(diǎn)啊 - 保存結(jié)果
cat result.json
內(nèi)容(示例)
{
"version": 1,
"partitions": [{
"topic": "your topic's name",
"partition": 4,
"replicas": [0],
"log_dirs": ["any"]
}, {
"topic": "your topic's name",
"partition": 1,
"replicas": [1],
"log_dirs": ["any"]
}, {
"topic": "your topic's name",
"partition": 2,
"replicas": [0],
"log_dirs": ["any"]
}, {
"topic": "your topic's name",
"partition": 3,
"replicas": [1],
"log_dirs": ["any"]
}, {
"topic": "your topic's name",
"partition": 0,
"replicas": [0],
"log_dirs": ["any"]
}]
}
1.3 執(zhí)行執(zhí)行計(jì)劃
-
執(zhí)行腳本
kafka-reassign-partitions.sh --zookeeper 你的zookeeperIP:PORT --reassignment-json-file result.json --execute
1.4 驗(yàn)證
-
執(zhí)行腳本
kafka-reassign-partitions.sh --zookeeper 你的zookeeperIP:PORT --reassignment-json-file result.json --verify - 結(jié)果示例
Status of partition reassignment:
Reassignment of partition topic-1 completed successfully
Reassignment of partition topic-4 completed successfully
Reassignment of partition topic-2 completed successfully
Reassignment of partition topic-3 completed successfully
Reassignment of partition topic-0 completed successfully
1.5 簡(jiǎn)化操作
我們可以仿照1.2結(jié)果示例自己編輯一份執(zhí)行計(jì)劃,然后按照1.3操作就行,前提是你要熟悉分區(qū),并分配均勻。