kafka在centos上如何迁移
小樊
32
2025-12-21 13:27:59
Kafka 在 CentOS 上的迁移指南
一、迁移场景与总体策略
- 同机目录或磁盘迁移:将 Kafka 的数据目录 log.dirs与运行日志目录迁移到更大的磁盘,尽量逐个节点滚动操作,避免集群中断。适用于磁盘扩容或目录结构调整。
- 跨机器/跨机房迁移:搭建新集群后,按业务容忍度选择迁移策略:
- 不停机“不迁移数据”(双写/切流):先切生产者,再等消费者把旧集群存量消费完,最后切消费者;适合允许短暂双写或数据有 TTL 的场景。
- “迁移数据”(镜像/重放):用 MirrorMaker 2 或同类工具在新旧集群间持续同步,停写后追平再切换;适合对分区与位点有要求的场景。
- 特殊消费组(如不提交 offset 到 Kafka或幂等):可边切生产边切消费,无需强依赖旧位点。
- 迁移前务必确认消费组的auto.offset.reset策略(earliest/latest),不同策略决定切换前是否需要重置位点或预创建消费组。
二、同机目录或磁盘迁移步骤(滚动进行)
- 准备与检查
- 记录当前配置:broker.id、listeners、log.dirs、Zookeeper/KRaft 连接、JVM 参数等。
- 选择业务低峰期,规划逐节点停机窗口,避免同时重启多个 broker。
- 停止服务
- 建议先停 Zookeeper(如使用外置 ZK),再停 Kafka,减少会话超时与再均衡冲击:
- 停止 Kafka:/opt/kafka/bin/kafka-server-stop.sh
- 停止 ZK:/opt/zookeeper/bin/zkServer.sh stop
- 迁移数据目录
- 创建新目录并授权(示例迁移到 /mnt/kafka):
- mkdir -p /mnt/kafka/data /mnt/kafka/logs
- chown -R kafka:kafka /mnt/kafka
- 使用 rsync/cp 复制数据(保留属性与硬链接更稳妥):
- rsync -av /opt/kafka/data/ /mnt/kafka/data/
- rsync -av /opt/kafka/logs/ /mnt/kafka/logs/
- 修改配置
- 编辑 config/server.properties,更新数据目录:
- log.dirs=/mnt/kafka/data
- 如有多盘可做条带化:log.dirs=/mnt/disk1/kafka,/mnt/disk2/kafka
- 运行日志目录(Kafka 2.x 常见做法):编辑 bin/kafka-run-class.sh,在脚本前部设置:
- 启动与验证
- 先启 ZK,再启 Kafka:
- /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
- 验证:
- 查看进程:jps | grep Kafka
- 查看新日志:tail -f /mnt/kafka/logs/server.log
- 查看 Topic/分区:/opt/kafka/bin/kafka-topics.sh --bootstrap-server <broker_ip>:9092 --describe
- 生产消费冒烟测试(test topic)。
- 回滚与清理
- 观察一段时间(如数小时至一天)确认无异常、新目录容量增长正常,再清理旧数据:
- rm -rf /opt/kafka/data /opt/kafka/logs
- 如异常,回滚 server.properties 与 LOG_DIR 并重启即可。
三、跨机器或跨机房迁移步骤
- 规划与准备
- 新集群节点数、磁盘、网络带宽与安全组/防火墙策略(开放 9092/2181 或 KRaft 端口)。
- Topic 规划:分区数与副本数尽量与旧集群保持一致;必要时提前在新集群创建。
- 消费组策略:确认应用使用的 auto.offset.reset(earliest/latest),必要时在切换前重置位点或预创建消费组。
- 迁移方式选择
- 不迁移数据(双写/切流):
- 生产者先切到新集群;2) 旧集群继续消费至无积压;3) 消费者切到新集群;4) 观察并回收旧集群。
- 迁移数据(镜像/重放):
- 用 MirrorMaker 2 或同类工具持续同步新旧集群;2) 停写旧集群;3) 追平滞后后一次性切换生产者与消费者;4) 观察并回收旧集群。
- 特殊消费组(幂等或不提交 offset):可边切生产边切消费,无需强依赖旧位点。
- 位点与一致性
- 若需“相同分区与位点”迁移,优先选择“迁移数据”方案,并在切换前停止写入,避免位点映射问题。
- 若仅做业务切换且可接受位点变化,可采用“不迁移数据”方案,减少复杂度与同步时间。
- 验证与切换
- 迁移完成后,核对:
- Topic 列表、分区与副本分布、ISR;
- 关键消费组的积压(Lag)是否清零;
- 端到端业务日志与监控告警。
四、常用命令与注意事项
- 常用命令
- 停止/启动 Kafka:
- /opt/kafka/bin/kafka-server-stop.sh
- /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
- 查看进程与日志:
- jps | grep Kafka
- tail -f /mnt/kafka/logs/server.log
- 创建/查看 Topic:
- /opt/kafka/bin/kafka-topics.sh --create --topic test --bootstrap-server :9092 --partitions 3 --replication-factor 3
- /opt/kafka/bin/kafka-topics.sh --describe --topic test --bootstrap-server :9092
- 防火墙(如启用 firewalld):
- firewall-cmd --zone=public --add-port=9092/tcp --permanent && firewall-cmd --reload
- 注意事项
- 目录迁移务必逐节点进行,保持多数节点在线,减少再均衡影响。
- 多盘部署时,log.dirs 指定不同磁盘可提升吞吐;同一磁盘多目录不会带来并行写优势。
- 运行日志目录(LOG_DIR)在 Kafka 2.x 常需在脚本中设置;Kafka 3.x 支持用 KAFKA_LOG_DIRS 环境变量或改进脚本方式,具体以所用版本为准。
- 迁移完成后,保留旧集群只读一段时间,便于回滚与取证。