kafka-集群扩容
一. 前言:
随着业务增加,我们会面临这kafka当性能问题,需要进行集群扩容,增加broker节点。
二. 扩容说明:
增加新服务到kafka集群是很容易的(参考: kafka-部署安装-CSDN博客 ),只要为新服务分配一个独一无二的Broker ID并启动即可。但是,新的服务不会自动分配到任何数据,需要把分区数据迁移给它们,在此期间它们一直不工作,直到新的topic创建,所以,通常向集群添加机器时,你需要将一些现有的数据迁移到这些机器上。
迁移数据的过程是手动启动的,但是执行过程是完全自动化的。在kafka后台内部中,kafka将添加新的服务器,并作为正在迁移分区的follower,来完全复制该分区现有的数据。当新服务器完全复制该分区的内容并加入同步副本,成为现有副本之一后,就将现有的副本分区上的数据删除。
分区重新分配工具可以用于跨broker迁移分区,理想的分区分配将确保所有的broker数据负载和分区大小。分区分配工具没有自动研究kafka集群的数据分布和迁移分区达到负载分布的能力,因此,管理员要弄清楚哪些topic或分区应该迁移。
分区分配工具的3种模式:
--generate: 这个选项命令,是生成分配规则json文件的,生成“候选人”重新分配到指定的topic的所有parition都移动到新的broker。此选项,仅提供了一个方便的方式来生成特定的topic和目标broker列表的分区重新分配 “计划”。
--execute: 这个选项命令,是执行你用--generate 生成的分配规则json文件的,(用--reassignment-json-file 选项),可以是自定义的分配计划,也可以是由管理员或通过--generate选项生成的。
--verify: 这个选项命令,是验证执行--execute重新分配后,列出所有分区的状态,状态可以是成功完成,失败或正在进行中的。
使用分区重新分配工具将从当前的broker集的一些topic移到新添加的broker。同时扩大现有集群,因为这很容易将整个topic移动到新的broker,而不是每次移动一个parition,你要提供新的broker和新broker的目标列表的topic列表(就是刚才的生成的json文件)。然后工具将根据你提供的列表把topic的所有parition均匀地分布在所有的broker,topic的副本保持不变。
例如: 原有节点0,1,2 ,需要扩容两个节点, 对应ID为3,4, 将一个topic(nginx_access_api)进行重新分区,创建一个json文件:
#cat topics-to-move.json
{
"topics": [
{"topic": "nginx_access_api"}
],
"version": 1
}
通过--generate生成规则:
# bin/kafka-reassign-partitions.sh --bootstrap-server logkafka-1:9092 --topics-to-move-json-file topics-to-move.json --broker-list "0,1,2,3,4" --generate
Current partition replica assignment
......
Proposed partition reassignment configuration
{"version":1,"partitions":[{"topic":"nginx_access_api","partition":9,"replicas":[4,1],"log_dirs":["any","any"]},{"topic":"nginx_access_api","partition":4,"replicas":[4,0],"log_dirs":["any","any"]},{"topic":"nginx_access_api","partition":6,"replicas":[1,3],"log_dirs":["any","any"]},{"topic":"nginx_access_api","partition":14,"replicas":[4,2],"log_dirs":["any","any"]},{"topic":"nginx_access_api","partition":3,"replicas":
......
#注意: 2.2之前需要用--zookeeper 指定zk地址
注意,这个时候,迁移还没有开始,它只是告诉你当前分配和新的分配规则,当前分配规则用来回滚,新的分配规则保存在json文件(例如,保存在 reassignment.json这个文件下)然后,用--execute选项来执行它。
bin/kafka-reassign-partitions.sh --bootstrap-server logkafka-1:9092 --reassignment-json-file reassignment.json --execute
可以通过--verify 指令查看进度。
bin/kafka-reassign-partitions.sh --bootstrap-server logkafka-1:9092 --reassignment-json-file reassignment.json --verify
可以执行验证命令,过滤包含 successfully 的输出,查看进度。
----------------------------------------------------------------------------------------------
深耕运维行业多年,擅长linux、容器云原生、运维自动化等方面。
承接各类运维环境部署、方案设计/实施、服务代运维工作,欢迎沟通交流!
(V: xiaoxiangbj2013 ) !