天天看點

(三)kafka叢集擴容後的topic分區遷移

kafka叢集擴容後的topic分區遷移

kafka叢集擴容後,新的broker上面不會資料進入這些節點,也就是說,這些節點是空閑的;它隻有在建立新的topic時才會參與工作。除非将已有的partition遷移到新的伺服器上面;

是以需要将一些topic的分區遷移到新的broker上。

kafka-reassign-partitions.sh是kafka提供的用來重新配置設定partition和replica到broker上的工具

簡單實作重新配置設定需要三步:

  • 生成配置設定計劃(generate)
  • 執行配置設定(execute)
  • 檢查配置設定的狀态(verify)

具體操作如下:

1. 生成配置設定計劃

編寫配置設定腳本:

vi topics-to-move.json

内容如下:

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

執行配置設定計劃生成腳本:

kafka-reassign-partitions.sh --zookeeper $ZK_CONNECT --topics-to-move-json-file topics-to-move.json --broker-list "5,6,7,8" --generate
           

執行結果如下:

[hadoop@sdf-nimbus-perf topic_reassgin]$ kafka-reassign-partitions.sh --zookeeper $ZK_CONNECT --topics-to-move-json-file topics-to-move.json --broker-list "5,6,7,8" --generate
Current partition replica assignment  #目前分區的副本配置設定

{"version":1,"partitions":[{"topic":"event_request","partition":0,"replicas":[3,4]},{"topic":"event_request","partition":1,"replicas":[4,5]}]}
Proposed partition reassignment configuration #建議的分區配置

{"version":1,"partitions":[{"topic":"event_request","partition":0,"replicas":[6,5]},{"topic":"event_request","partition":1,"replicas":[7,6]}]}
           

Proposed partition reassignment configuration 後是根據指令行的指定的brokerlist生成的分區配置設定計劃json格式。将 Proposed partition reassignment configuration的配置copy儲存到一個檔案中 topic-reassignment.json

vi topic-reassignment.json

{"version":1,"partitions":[{"topic":"event_request","partition":0,"replicas":[6,5]},{"topic":"event_request","partition":1,"replicas":[7,6]}]}
           

2. 執行配置設定(execute)

根據step1 生成的配置設定計劃配置json檔案topic-reassignment.json,進行topic的重新配置設定。

kafka-reassign-partitions.sh --zookeeper $ZK_CONNECT --reassignment-json-file topic-reassignment.json --execute
           

執行前的分區分布:

[hadoop@sdf-nimbus-perf topic_reassgin]$ le-kafka-topics.sh --describe --topic event_request
Topic:event_request	PartitionCount:2	ReplicationFactor:2	Configs:
	Topic: event_request	Partition: 0	Leader: 3	Replicas: 3,4	Isr: 3,4
	Topic: event_request	Partition: 1	Leader: 4	Replicas: 4,5	Isr: 4,5
           

執行後的分區分布:

[hadoop@sdf-nimbus-perf topic_reassgin]$ le-kafka-topics.sh --describe --topic event_request
Topic:event_request	PartitionCount:2	ReplicationFactor:4	Configs:
	Topic: event_request	Partition: 0	Leader: 3	Replicas: 6,5,3,4	Isr: 3,4
	Topic: event_request	Partition: 1	Leader: 4	Replicas: 7,6,4,5	Isr: 4,5
           

3. 檢查配置設定的狀态

檢視配置設定的狀态:正在進行

[hadoop@sdf-nimbus-perf topic_reassgin]$ kafka-reassign-partitions.sh --zookeeper $ZK_CONNECT --reassignment-json-file topic-reassignment.json --verify
Status of partition reassignment:
Reassignment of partition [event_request,0] is still in progress
Reassignment of partition [event_request,1] is still in progress
[hadoop@sdf-nimbus-perf topic_reassgin]$ 
           

檢視“is still in progress” 狀态時的分區,副本分布狀态:

發現Replicas有4個哦,說明在重新配置設定的過程中新舊的副本都在進行工作。

[hadoop@sdf-nimbus-perf topic_reassgin]$ le-kafka-topics.sh --describe --topic event_request
Topic:event_request	PartitionCount:2	ReplicationFactor:4	Configs:
	Topic: event_request	Partition: 0	Leader: 3	Replicas: 6,5,3,4	Isr: 3,4
	Topic: event_request	Partition: 1	Leader: 4	Replicas: 7,6,4,5	Isr: 4,5
           

檢視配置設定的狀态:配置設定完成。

[hadoop@sdf-nimbus-perf topic_reassgin]$ kafka-reassign-partitions.sh --zookeeper $ZK_CONNECT --reassignment-json-file topic-reassignment.json --verify
Status of partition reassignment:
Reassignment of partition [event_request,0] completed successfully
Reassignment of partition [event_request,1] completed successfully
           

檢視“completed successfully”狀态的分區,副本狀态:

已經按照生成的配置設定計劃正确的完成了分區的重新配置設定。

[hadoop@sdf-nimbus-perf topic_reassgin]$ le-kafka-topics.sh --describe --topic event_request
Topic:event_request	PartitionCount:2	ReplicationFactor:2	Configs:
	Topic: event_request	Partition: 0	Leader: 6	Replicas: 6,5	Isr: 6,5
	Topic: event_request	Partition: 1	Leader: 7	Replicas: 7,6	Isr: 6,7           

作者:

丹江湖畔養蜂子的趙大爹

出處:http://www.cnblogs.com/honeybee/

關于作者:丹江湖畔養蜂子的趙大爹

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結