分区重新分配工具
bin/kafka-reassign-partitions.sh 可以用来调整分区副本的重新分布,包括增加副本,迁移副本等。
此工具有三大选项:
- –generate:创建分配计划,用户通过指定topic列表和broker列表来生成指定topic列表的【分区重新分配计划】。
- –execute: 执行分配计划,通过【分区重新分配计划】或者自定义分配计划进行实际行动。
- –verify: 核实计划执行情况,返回计划执行状态,也可以重复的添加/删除分配过程中的网络限流。
扩展集群
集群扩展意味着增加一个新的broker。
kafka不会自动平衡数据。
需要手动启动分区重新分配工具(bin/kafka-reassign-partitions.sh)来进行自动化分配。
创建分配计划
编写【指定要迁移】的topic列表文件topics-to-move.json
{"topics": [{"topic": "foo1"},
{"topic": "foo2"}],
"version":1
}
将topic列表里的topic迁移到broker.id
为"5和6"的节点上.
bin/kafka-reassign-partitions.sh \
--command-config config/my.tools.properties \
--bootstrap-server kafka1:8123 \
--topics-to-move-json-file topics-to-move.json \
--broker-list "5,6" \
--generate
输出如下:先输出当前topic分区的分布配置,然后输出调整后的分布配置
Current partition replica assignment
{"version":1,
"partitions":[{"topic":"foo1","partition":2,"replicas":[1,2]},
{"topic":"foo1","partition":0,"replicas":[3,4]},
{"topic":"foo2","partition":2,"replicas":[1,2]},
{"topic":"foo2","partition":0,"replicas":[3,4]},
{"topic":"foo1","partition":1,"replicas":[2,3]},
{"topic":"foo2","partition":1,"replicas":[2,3]}]
}
Proposed partition reassignment configuration
{"version":1,
"partitions":[{"topic":"foo1","partition":2,"replicas":[5,6]},
{"topic":"foo1","partition":0,"replicas":[5,6]},
{"topic":"foo2","partition":2,"replicas":[5,6]},
{"topic":"foo2","partition":0,"replicas":[5,6]},
{"topic":"foo1","partition":1,"replicas":[5,6]},
{"topic":"foo2","partition":1,"replicas":[5,6]}]
}
将上面输出的两部分配置,分别保存为当前topic分区落点配置topics-current-plan.json
和预期topic分区落点配置topics-expect-plan.json
执行分配计划
bin/kafka-reassign-partitions.sh \
--command-config config/my.tools.properties \
--bootstrap-server kafka1:8123 \
--reassignment-json-file topics-expect-plan.json \
--execute
ℹ️自定义分配计划只需要满足上面分配计划的文件格式即可.
添加限速:–throttle 50000000 限速50MB/s 你可以多次重复执行上述命令并通过新的限速值来动态调整限速.
检查分配计划
bin/kafka-reassign-partitions.sh \
--command-config config/my.tools.properties \
--bootstrap-server kafka1:8123 \
--reassignment-json-file topics-expect-plan.json \
--verify
ℹ️如果–execute期间添加了–throttle,则–verify会在迁移完成后清空–throttle
分区副本因子调整
调整副本因子,其实就是自定义分区配置,参考上面的配置,仅针对需要调整的topic的分区自定义配置并执行即可。
问题点
限速带来的问题
使用限速可能会导致复制速度过慢,以至于复制速度低于生产者写入速度。这会导致复制数据滞后越来越大。因此,应该在复制期间,监控滞后状态。这里的复制速度,就是消费速度。
滞后指标如下:
kafka.server:type=FetcherLagMetrics,name=ConsumerLag,clientId=([-.\w]+),topic=([-.\w]+),partition=([0-9]+)
如果发现指标没有降低,则应该放宽限速。
关于消费速度滞后监控,可以采取prometheus+grafana。