kafka分区重做
kafak重做节点数据后,数据数目录出现了不均衡分配,导致一个数据目录的数据量过大,这个时候需要考虑对节点的数据做跨节点迁移,目前还没有研究出来节点内的数据均衡办法,正常也可以用这个方式去做节点内部的数据均衡或者迁移数据目录,下面具体说一下操作步骤和方式。
主机环境:
192.168.0.2 broker_id=1 data_log=/data1,/data2,/data3
192.168.0.3 broker_id=2 data_log=/data1,/data2,/data3
192.168.0.4 broker_id=3 data_log=/data1,/data2,/data3
192.168.0.5 broker_id=4 data_log=/data1,/data2,/data3
topic:test_topic partitions:2 replications:3
当前这个topic分区数据都集中子啊broker_id=1,0号分区和1号分区都在/data1数据目录下,导致data1数据目录空间不够了,然后broker_id=4节点的硬盘使用比较空,所以可以将这个0号分区调整到4节点去
通过硬盘告警知道了哪个节点的哪个硬盘容量不够了,去data_log目录看看具体是哪个topic分区数据占用大,可以迁移个分区数据到4号节点
./kafka-topics.sh --zookeeper kafka:2181 --topic test_topic --describe # 得到一个topic的详情信息,找到对应的分区信息,将leader节点写到第一个
|
Topic:test_topic PartitionCount:2 ReplicationFactor:3 Configs:retention.ms=648000000,max.message.bytes=52428800 |
生成kafka新的分区json,找一个比较空闲的主机,硬盘容量充足
{
"version":1,
"partitions":[
{"topic":"test_topic","partition":0,"replicas":[3,4,2]}
]
}
执行这个计划,保存一下输出的备份计划,有问题可以回退
[ywxxxxx@kafka-003 bin]$ ./kafka-reassign-partitions.sh --zookeeper kafka:2181 --reassignment-json-file ~/re.json --execute
Current partition replica assignment
{"version":1,"partitions":[{"topic":"test_topic","partition":0,"replicas":[3,1,2],"log_dirs":["any","any","any"]},{"topic":"test_topic","partition":1,"replicas":[2,1,3],"log_dirs":["any","any","any"]}}
Save this to use as the --reassignment-json-file option during rollback
Successfully started reassignment of partitions.
然后查下topic详情会有多一个副本,然后等待新副本数据同步完成,会自动删除替换冗余的副本信息
./kafka-topics.sh --zookeeper kafka:2181 --topic test_topic --describe
Topic:test_topic PartitionCount:2 ReplicationFactor:3 Configs:retention.ms=648000000,max.message.bytes=52428800
Topic: test_topic Partition: 0 Leader: 3 Replicas: 3,1,2,4 Isr: 3,1,2
Topic: test_topic Partition: 1 Leader: 2 Replicas: 2,1,3 Isr: 2,1,3
浙公网安备 33010602011771号