一、修改分区副本
### --- 修改分区副本
~~~ # 实际项目中,
~~~ 我们可能由于主题的副本因子设置的问题,
~~~ 需要重新设置副本因子或者由于集群的扩展,需要重新设置副本因子。
~~~ topic一旦使用又不能轻易删除重建,因此动态增加副本因子就成为最终的选择。
~~~ # 说明:
~~~ kafka 1.0版本配置文件默认没有default.replication.factor=x, 因此如果创建topic时,
~~~ 不指定–replication-factor 想,
~~~ 默认副本因子为1. 我们可以在自己的server.properties中配置上常用的副本因子,省去手动调整。
~~~ 例如设置default.replication.factor=3,
~~~ 详细内容可参考官方文档https://kafka.apache.org/documentation/#replication
### --- 原因分析:
~~~ # 假设我们有2个kafka broker分别broker0,broker1。
~~~ #当我们创建的topic有2个分区partition时并且replication-factor为1,基本上一个broker上一个分区。
~~~ 当一个broker宕机了,该topic就无法使用了,因为两个个分区只有一个能用。
~~~ #当我们创建的topic有3个分区partition时并且replication-factor为2时,
~~~ #可能分区数据分布情况是
~~~ broker0, partiton0,partiton1,partiton2, broker1, partiton1,partiton0,partiton2,
~~~ 每个分区有一个副本,当其中一个broker宕机了,kafka集群还能完整凑出该topic的两个分区,
~~~ 例如当broker0宕机了,可以通过broker1组合出topic的两个分区。
二、创建项目
### --- 创建主题:
[root@hadoop01 ~]# kafka-topics.sh --zookeeper localhost:2181/myKafka \
--create --topic tp_re_02 --partitions 3 --replication-factor 1
### --- 查看主题细节:
[root@hadoop01 ~]# kafka-topics.sh --zookeeper localhost:2181/myKafka \
--describe --topic tp_re_02
~~~输出参数
Topic:tp_re_02 PartitionCount:3 ReplicationFactor:1 Configs:
Topic: tp_re_02 Partition: 0 Leader: 1 Replicas: 1 Isr: 1
Topic: tp_re_02 Partition: 1 Leader: 0 Replicas: 0 Isr: 0
Topic: tp_re_02 Partition: 2 Leader: 1 Replicas: 1 Isr: 1
### --- 修改副本因子:错误
[root@hadoop01 ~]# kafka-topics.sh --zookeeper localhost:2181/myKafka --alter --topic tp_re_02 --replication-factor 2
Option "[replication-factor]" can't be used with option"[alter]"
三、修改主题副本因子
### --- 使用kafka-reassign-partitions.sh 修改副本因子:创建increment-replication-factor.json
[root@hadoop01 ~]# vim increment-replication-factor.json
{
"version":1,
"partitions":[
{"topic":"tp_re_02","partition":0,"replicas":[0,1]},
{"topic":"tp_re_02","partition":1,"replicas":[0,1]},
{"topic":"tp_re_02","partition":2,"replicas":[1,0]}
]
}
### --- 执行分配
[root@hadoop01 ~]# kafka-reassign-partitions.sh --zookeeper \
localhost:2181/myKafka --reassignment-json-file \
increment-replication-factor.json --execute
~~~输出参数
Current partition replica assignment
{"version":1,"partitions":[{"topic":"tp_re_02","partition":2,"replicas":
[1],"log_dirs":["any"]},{"topic":"tp_re_02","partition":1,"replicas":
[0],"log_dirs":["any"]},{"topic":"tp_re_02","partition":0,"replicas":
[1],"log_dirs":["any"]}]}
Save this to use as the --reassignment-json-file option during rollback
Successfully started reassignment of partitions.
### --- 查看主题细节:
[root@node1 ~]# kafka-topics.sh --zookeeper localhost:2181/myKafka \
--describe --topic tp_re_02
~~~输出参数
Topic:tp_re_02 PartitionCount:3 ReplicationFactor:2 Configs:
Topic: tp_re_02 Partition: 0 Leader: 1 Replicas: 0,1 Isr: 1,0
Topic: tp_re_02 Partition: 1 Leader: 0 Replicas: 0,1 Isr: 0,1
Topic: tp_re_02 Partition: 2 Leader: 1 Replicas: 1,0 Isr: 1,0