背景
前段时间由于集群各台机器配置不一样,导致部分机器磁盘吃紧。定位发现kafka log数据占了一半的容量,而且某一个topic的数据惊人,50个partition,每个partition24G,3副本。算了一下3.6T的磁盘容量。而目前已经调整到3天的保留时间,不能再短了,只好缩减一下replication-factor的数量由3变为2,这样整个容量减少三分之一,也是很可观的量。
尝试
考虑到是kafka topic相关的属性,尝试命令
发现好像有点戏,于是就尝试修改某个topic下数据的副本数
原来这个参数不能改副本数只可以修改partition数量,官方说明
继续查看kafka命令发现有个kafka-reassign-partitions命令,研究一下
这边有个--reassignment-json-file参数可以指定topic下某个分区和对应副本所在的机器(broker.id),那我要是修改它的副本列表是否可以减少他的副本数呢,带着疑问就去尝试吧。
实验步骤
1. 调查topic=test001 分区副本信息
2. 制作分区副本配置文件,就是那个参数的json文件
3. 使用配置文件重新制定分区信息
4. 验证(分区副本信息,kafka log data的数量变化情况)
1. 调查topic=test001 分区副本信息
> kafka-topics --topic test001 --zookeeper localhost:2181/kafka --describe
2. 制作分区副本配置文件,就是那个参数的json文件
3. 使用配置文件重新制定分区信息
> kafka-reassign-partitions --zookeeper localhost:2181/kafka --reassignment-json-file abc.json --execute
4. 验证(分区副本信息,kafka log data的数量变化情况)
> kafka-topics --topic test001 --zookeeper localhost:2181/kafka --describe
确实分区副本信息中心变化了,从3个副本变成了2个。
再去验证数据
执行前
执行后,发现129上确实没有了topic=test001的partition 3的数据目录了