kafka集群扩容、kafka topic迁移
现有环境
IP | 组件 | 角色 |
---|---|---|
192.168.17.51 | kafka01 | broker1 |
192.168.17.52 | kafka02 | broker2 |
192.168.17.53 | kafka03 | broker3 |
- 扩容之后环境
IP | 组件 | 角色 |
---|---|---|
192.168.17.51 | kafka01 | broker1 |
192.168.17.52 | kafka02 | broker2 |
192.168.17.53 | kafka03 | broker3 |
192.168.17.54 | kafka04 | broker4 |
- 背景:目前kafka集群只有三台,随着数据量逐渐变大,三台服务器kafka节点不足以支撑正常使用,所以打算在扩容一台kafka节点
- kafka扩容步骤:
- 分发kafka包
scp -r kafka_2.11-1.1.1 root@192.168.17.54:/opt/
- 创建软连接,赋权限
ln -s kafka_2.11-1.1.1 /opt/kafka
chown -R kafka:kafka kafka
chown -R kafka:kafka kafka_2.11-1.1.1/
- 修改配置
vim /opt/kafka/config/server.properties
新的节点需要修改下面这些配置
broker.id #集群中是唯一的数字
listeners #本机IP
log.dirs #数据目录,可以多个目录,多目录逗号隔开
zookeeper.connec #zookeeper地址
- 启动kafka,并检查是否成功
nohup /bin/sh /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties > /dev/null 2>&1 &
jps
上步骤完成以后kafka集群没有完全扩容成功,因为只扩容了kafka节点,原来有的topic还是在原有的几点上,这台新扩容的还没有分担原有的压力,所以还需要迁移topic
- 迁移kafka topic
在原有的集群上,任一一台kafka节点操作
使用kafka提供的工具kafka-reassign-partitions.sh来迁移数据。迁移数据需要分三步做
第一步:生成迁移计划
先手动生成一个topic.json,内容如下。这里topic可以是一个列表
单个topic迁移
{
"topics": [{"topic": "ceshi2"},
"version": 1
}
多个topic迁移
{
"topics": [{"topic": "ceshi2"},
{"topic": "ceshi3"},
{"topic": "ceshi4"}],
"version": 1
}
- 执行以下命令 生成迁移计划
./bin/kafka-reassign-partitions.sh --zookeeper 192.168.17.51:2181/kafka --topics-to-move-json-file topic.json --broker-list "1,2,3,4" --generate
–broker-list kafka集群的所有broker.id 我的是从1开始
- 查看需要迁移的topic信息
./bin/kafka-topics.sh --describe --zookeeper 192.168.17.52:2181/kafka --topic ceshi2
新建一个文件reassignment.json
保存上边建议分区信息,注意只复制只复制上述中’Proposed partition reassignment configuration’以下的部分
其中Current partition replica assignment指当前的分区情况,Proposed partition reassignment configuration是计划的分区情况
./bin/kafka-reassign-partitions.sh --zookeeper 192.168.17.51:2181/kafka --reassignment-json-file reassignment.json --execute
- 验证1
./bin/kafka-reassign-partitions.sh --zookeeper 192.168.17.51:2181/kafka --reassignment-json-file reassignment.json --verify
- 验证2
可以通过以下命令查看该topic分布在那些节点上,正常是和刚才查到的不一样得,应该会在新扩容得节点上面有
./bin/kafka-topics.sh --describe --zookeeper 192.168.17.52:2181/kafka --topic ceshi2
迁移成功。