1

If we have a topic that is in Kafka and it has five partitions, can we increase the number of partitions to 30?

Also after increasing the number of partitions, we change the leader of each partition in order of the broker ids and rebalance the cluster for that particular topic. How can we do that?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
  • A web search shows some hints, including https://stackoverflow.com/q/33677871/1531971 –  Sep 07 '17 at 17:20

1 Answers1

3

I found out how it works.

1) First find the information of the existing topic

2) Find out all the brokers in your cluster with thier IDs

3) Scale number of partitions

4) Run the cluster reassignment script to rebalance

Give the actual zookeeper urls or the ips where i am using localhost.

1) In the bin directory we have kafka-topics.sh ./kafka-topics.sh --zookeeper localhost:2181 --topic dummytopic --describe

shows you all about the topic where the leaders of partitions are there and replicas are there

2) ./zookeeper-shell.sh localhost:2181 do ls /brokers/ids

gives you list of all the brokers ids

3)./kafka-topics.sh --alter --zookeeper localhost:2181 --topic dummytopic --partitions 30

Increases the number of partitions

4) Before running this command you need a json file which will let you change the partition leader for a particular topic

For that i developed a simple tool do generate the json for very large partition count

https://github.com/chandradeepak/kafka-reassignment-gen

go build && topic=dummytopic num_partitions=30 brokerid_start=1022 replica_count=3 ./kafka-reassignment-gen

this will generate a json which we can use for the expand-cluster-reassignment.json . it looks some thing like this

{"version":1,"partitions":[{"topic":"dummytopic","partition":0,"replicas":[1001,1002,1003]},{"topic":"dummytopic","partition":1,"replicas":[1002,1003,1004]},{"topic":"dummytopic","partition":2,"replicas":[1003,1004,1005]},{"topic":"dummytopic","partition":3,"replicas":[1004,1005,1006]},{"topic":"dummytopic","partition":4,"replicas":[1005,1006,1007]},{"topic":"dummytopic","partition":5,"replicas":[1006,1007,1008]},{"topic":"dummytopic","partition":6,"replicas":[1007,1008,1009]},{"topic":"dummytopic","partition":7,"replicas":[1008,1009,1010]},{"topic":"dummytopic","partition":8,"replicas":[1009,1010,1011]},{"topic":"dummytopic","partition":9,"replicas":[1010,1011,1012]},{"topic":"dummytopic","partition":10,"replicas":[1011,1012,1013]},{"topic":"dummytopic","partition":11,"replicas":[1012,1013,1014]},{"topic":"dummytopic","partition":12,"replicas":[1013,1014,1015]},{"topic":"dummytopic","partition":13,"replicas":[1014,1015,1016]},{"topic":"dummytopic","partition":14,"replicas":[1015,1016,1017]},{"topic":"dummytopic","partition":15,"replicas":[1016,1017,1018]},{"topic":"dummytopic","partition":16,"replicas":[1017,1018,1019]},{"topic":"dummytopic","partition":17,"replicas":[1018,1019,1020]},{"topic":"dummytopic","partition":18,"replicas":[1019,1020,1021]},{"topic":"dummytopic","partition":19,"replicas":[1020,1021,1022]},{"topic":"dummytopic","partition":20,"replicas":[1021,1022,1023]},{"topic":"dummytopic","partition":21,"replicas":[1022,1023,1024]},{"topic":"dummytopic","partition":22,"replicas":[1023,1024,1025]},{"topic":"dummytopic","partition":23,"replicas":[1024,1025,1026]},{"topic":"dummytopic","partition":24,"replicas":[1025,1026,1027]},{"topic":"dummytopic","partition":25,"replicas":[1026,1027,1028]},{"topic":"dummytopic","partition":26,"replicas":[1027,1028,1029]},{"topic":"dummytopic","partition":27,"replicas":[1028,1029,1030]},{"topic":"dummytopic","partition":28,"replicas":[1029,1030,1001]},{"topic":"dummytopic","partition":29,"replicas":[1030,1001,1002]}]}

./kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file expand-cluster-reassignment.json --execute

This will execute the cluster reassignment and changes the partition leaders to what you expect.