温馨提示×

kafka数据迁移在centos上如何操作

小樊
32
2025-12-27 09:12:30
栏目: 智能运维

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.shbin/ 启动脚本中设置 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 分区。
    • 数据一致:对比关键 Topicend offset/消息条数;抽样校验关键业务字段。
    • 消费验证:用 kafka-consumer-groups.sh 检查 Lag 与位点是否连续。
  • 注意事项
    • 不建议跨大版本直接拷贝 log.dirs;跨版本迁移优先用 MM2/导出导入
    • 迁移窗口内控制写入或切到备集群,避免数据不一致。
    • 多盘部署时 log.dirs 可配置多路径(对应不同磁盘),可提升吞吐;副本均衡以分区数为单位,而非磁盘空间。
    • 迁移前做好全量备份回滚预案,并在低峰期执行。

0