温馨提示×

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,在脚本前部设置:
      • LOG_DIR=/mnt/kafka/logs
  • 启动与验证
    • 先启 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),必要时在切换前重置位点或预创建消费组。
  • 迁移方式选择
    • 不迁移数据(双写/切流):
      1. 生产者先切到新集群;2) 旧集群继续消费至无积压;3) 消费者切到新集群;4) 观察并回收旧集群。
    • 迁移数据(镜像/重放):
      1. 用 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 环境变量或改进脚本方式,具体以所用版本为准。
    • 迁移完成后,保留旧集群只读一段时间,便于回滚与取证

0