Kafka 在 CentOS 上的数据迁移实操指南
一、常见迁移场景与工具选择
- 同版本存储层搬迁(同集群内磁盘扩容/目录变更):停写→拷贝数据目录→修改 server.properties 的 log.dirs→逐台启动验证。适合快速迁移数据目录或扩容磁盘。
- 跨集群迁移/上云/容灾:使用 MirrorMaker 2(MM2) 或 Kafka Connect 做持续镜像,支持跨集群复制与消费者组偏移量同步,便于低停机切换。
- 节点下线或重均衡:使用 kafka-reassign-partitions.sh 生成并执行分区重分配计划,将副本从待下线节点迁走。
- 小数据量一次性迁移:使用 kafka-console-consumer + kafka-console-producer 进行 Topic 间或跨集群搬运(仅适合小规模或临时场景)。
二、同版本存储层搬迁步骤(同集群内)
- 准备与停写
- 选择低峰时段,停止写入或切到备集群;在每个 Broker 上执行停止脚本:
cd /opt/kafka/bin && ./kafka-server-stop.sh
- 迁移数据目录
- 创建并授权新目录(示例:/new/data/dir 与 /new/logs/dir):
mkdir -p /new/data/dir /new/logs/dir
chmod -R o+r+w /new/data/dir /new/logs/dir
- 使用后台拷贝保留现场:
nohup cp -r /old/data/dir/* /new/data/dir/ &
nohup cp -r /old/logs/dir/* /new/logs/dir/ &
- 修改配置
- 编辑 config/server.properties:更新 log.dirs=/new/data/dir(多盘可用逗号分隔)。
- 若需迁移 Kafka 运行日志目录(安装目录下的 logs),在 bin/kafka-run-class.sh 或 bin/ 启动脚本中设置 LOG_DIR=/new/logs/dir(不同版本脚本名可能不同,以实际安装为准)。
- 启动与验证
- 启动服务:
./kafka-server-start.sh -daemon …/config/server.properties
- 校验:
- 查看新目录是否增长、进程是否正常(如 tail -f /new/logs/dir/server.log)。
- 用 kafka-topics.sh --describe 检查分区与副本状态;用 kafka-consumer-groups.sh 校验消费位点与积压。
- 观察无误后再清理旧目录。
三、跨集群迁移与不停机切换(推荐 MM2)
- 准备
- 部署目标集群(Kafka 2.4+ 建议用 KRaft;旧版可用 Zookeeper),确保网络、认证(SSL/SASL)、配额与序列化一致。
- 使用 MirrorMaker 2 镜像
-
配置文件示例 mm2.properties:
clusters = src, dst
src.bootstrap.servers = PLAINTEXT://src-broker:9092
dst.bootstrap.servers = PLAINTEXT://dst-broker:9092
src->dst.enabled = true
dst->src.enabled = false
可选:同步消费者组偏移量
src->dst.sync.group.offsets.enabled = true
src->dst.sync.group.offsets.interval.seconds = 60
topics = .*
tasks.max = 8
-
启动:
bin/connect-mirror-maker.sh mm2.properties
- 切换与回滚
- 分批将消费者切到目标集群,观察 Lag 与错误率;确认稳定后将生产者切换。
- 保留源集群只读一段时间以便回滚;持续监控吞吐、延迟与异常。
四、节点下线与分区重分配
- 生成重分配计划
- 创建 topics.json(示例迁移所有分区):
{“topics”: [{“topic”: “your_topic”}], “version”: 1}
- 生成方案(示例将副本迁到 0,2):
kafka-reassign-partitions.sh --bootstrap-server broker:9092 \
–generate --topics-to-move-json-file topics.json --broker-list “0,2”
- 执行与验证
- 执行:
kafka-reassign-partitions.sh --bootstrap-server broker:9092 \
–execute --reassignment-json-file reassignment.json
- 查看进度:
kafka-reassign-partitions.sh --bootstrap-server broker:9092 \
–verify --reassignment-json-file reassignment.json
- 说明
- 老版本 Kafka(如 0.10.x)使用 –zookeeper 参数;新版本优先使用 –bootstrap-server。
五、校验与注意事项
- 校验清单
- 目录与权限:新目录存在且 Kafka 进程可写;配置文件中 log.dirs 与实际一致。
- 集群健康:所有 Broker In Sync Replicas(ISR) 正常,无 Under-Replicated 分区。
- 数据一致:对比关键 Topic 的 end offset/消息条数;抽样校验关键业务字段。
- 消费验证:用 kafka-consumer-groups.sh 检查 Lag 与位点是否连续。
- 注意事项
- 不建议跨大版本直接拷贝 log.dirs;跨版本迁移优先用 MM2/导出导入。
- 迁移窗口内控制写入或切到备集群,避免数据不一致。
- 多盘部署时 log.dirs 可配置多路径(对应不同磁盘),可提升吞吐;副本均衡以分区数为单位,而非磁盘空间。
- 迁移前做好全量备份与回滚预案,并在低峰期执行。