1. 副本均匀分布
1.1 创建16个分区,3个副本,均匀分布
# 创建 root@redis01:/usr/local/kafka# ./bin/kafka-topics.sh --bootstrap-server redis01:9092 --create --topic second --partitions 16 --replication-factor 3 # 查看 root@redis01:/usr/local/kafka# ./bin/kafka-topics.sh --bootstrap-server redis01:9092 --describe --topic second
分配副本,尽可能均匀分布,保证数据负载均衡,安全可靠。
2. 手动调整分区副本存储
在生产环境中,每台服务器的配置和性能不一致,但是Kafka只会根据自己的代码规则创建对应的分区副本,就会导致个别服务器存储压力较大。所有需要手动调整分区副本的存储。
2.1 创建4个分区,2个副本
需求:创建一个新的topic,4个分区,2个副本,名称为three。将该topic的所有副本都存储到broker0和broker1两台服务器上。
# 创建 root@redis01:/usr/local/kafka# ./bin/kafka-topics.sh --bootstrap-server redis01:9092 --create --topic three --partitions 4 --replication-factor 2 # 查看 root@redis01:/usr/local/kafka# ./bin/kafka-topics.sh --bootstrap-server redis01:9092 --describe --topic three
创建副本存储计划(所有副本都指定存储在broker0、broker1 中)。和前面的退役节点类似:Kafka14:服役、退役节点
- 创建一个要均衡的主题
topics-to-move.json
- 如果上述计划合适,创建副本存储计划。
root@redis01:/usr/local/kafka# vim increase-replication-factor.json
添加如下内容,步骤2负载均衡计划复制。
{ "version": 1, "partitions": [{ "topic": "three", "partition": 0, "replicas": [0, 1] }, { "topic": "three", "partition": 1, "replicas": [0, 1] }, { "topic": "three", "partition": 2, "replicas": [1, 0] }, { "topic": "three", "partition": 3, "replicas": [1, 0] }] }
- 执行副本存储计划
root@redis01:/usr/local/kafka# ./bin/kafka-reassign-partitions.sh --bootstrap-server redis01:9092 --reassignment-json-file increase-replication-factor.json --execute
- 验证副本存储计划
root@redis01:/usr/local/kafka# ./bin/kafka-reassign-partitions.sh --bootstrap-server redis01:9092 --reassignment-json-file increase-replication-factor.json --verify
- 还可以进一步验证,发现副本已经分布在0,1,2,3上了
root@redis01:/usr/local/kafka# ./bin/kafka-topics.sh --bootstrap-server redis01:9092 --topic three --describe