跳转到主要内容
完成前置条件梳理▸的情况下,可以进行后续的迁移流程。本文详细介绍从 Apache Kafka 迁移到 AutoMQ 的方案以及实施流程。

迁移方案

使用 Kafka Linking 从 Apache Kafka 迁移到 AutoMQ,主要考虑如下工作:
  • 消息数据同步 :Kafka 存储了历史已消费和未消费的消息数据,迁移集群需要保证消息数据按需复制到新集群,不能丢失消息。
  • 生产者切换: 迁移工作除去数据同步,还需要在合适的时机切换生产者应用,使生产者连接目标集群生产新的消息。
  • 消费者切换: 迁移工作除去数据同步,还需要在合适的时机切换消费者应用,使消费者连接目标集群接续之前的消费进度继续消费消息。
整体迁移方案参考下图的流程: 整体迁移方案流程图,包含消息数据同步、生产者切换和消费者切换三个步骤

操作步骤

步骤 1:创建 Kafka Link,开始同步数据

在完成前置条件梳理▸后,已经明确当前需要迁移的源集群、目标集群、Topic、ConsumerGroup 范围,接下来开始创建迁移任务。 创建Kafka Link ,前点击目标实例 >> Kafka Links ,按照指引填写相关参数。
参数名称
参数说明
Kafka Link Id
  • 含义:用来表示一组迁移任务,一般建议简短、易识别的名称。
  • 约束:仅支持英文大小写字母、数字、中划线(-)、下划线(_)
源集群
指定需要迁移的源集群,此处填写源集群的 Bootstrap 地址、ACL 身份识别参数。
目标集群
指定迁移的目标集群,此处选择已经创建的 AutoMQ 实例。
起始同步位置
指定迁移任务启动后同步消息的起始位置。支持如下选项:
  • 从最新位置: Kafka Linking 只复制接下来产生的新消息到目标集群。该模式适合对冷读敏感,希望从当前时刻开始追齐两端集群的迁移场景。
同步 Topic 列表
从源集群选择若干个 Source Topic,Kafka Linking 会在目标实例创建一一映射的 Mirror Topic。

如果目标实例已经存在当前 Topic,则无法创建该 Mirror Topic。

同步 Consumer Group 列表
从源集群选择若干个 Consumer Group,Kafka Linking 会在目标实例创建一一映射的 Consumer Group。
Kafka Link 创建表单,包含源集群、目标集群和同步配置字段 选择目标 topic 和 Consumer Group。 Kafka Link 同步 Topic 和 Consumer Group 选择界面
  1. 创建完成后,可以进入 Kafka Link 详情,查看指定的 Topic 和 Group 都已经进入同步中 状态。Kafka Link 创建完成后,同样支持添加新的 Topic、Consumer Group。可以按需添加待迁移的业务资源。
如果在 Kafka Link 中删除 Mirror Topic、Consumer Group ,会从目标集群(AutoMQ 实例)中删除对应的 Topic 和 Consumer Group。此操作无法撤销,后续只能重新创建。
Kafka Link 详情页,显示 Topic 和 Consumer Group 的同步状态

步骤 2:切换生产者和消费者,执行迁移流程

当 Kafka Link 创建完成后,用户需要修改 Topic 的 Producer、Consumer 配置,将 Producer 和 Consumer 从源集群切换到目标集群,其主要包含以下三类操作:
  • 生产者切流: 更新生产者的接入参数,使其指向目标集群。
  • 消费者切流: 更新消费者的接入参数,使其指向目标集群。
  • 提升 Mirror Topic 状态 :在 AutoMQ 控制台选择 Mirror Topic 进行状态提升,提升操作本质上是控制 Kafka Linking 组件不再代理 Producer 写流量以及从源集群复制数据。
具体 Producer 和 Consumer 切流的操作步骤参考下方阶段:

阶段一:Producer 切换到目标集群

迁移过程,首先切换 Producer 的接入配置,使 Producer 连接到目标集群( AutoMQ 实例)。切换过程的流量拓扑如下图所示: 阶段一流量拓扑图:生产者切换到目标 AutoMQ 实例 操作步骤:
  • Producer 分批次修改接入参数重启应用,使生产流量切换到目标的 AutoMQ 实例。
预期效果:
  • 生产流量分批次 Rolling 目标实例,预期生产流量不停机、无影响。
  • 源集群的消费者继续消费所有的消息,无影响。
  • 源集群消息会通过 Replicate 任务同步到 AutoMQ。
回滚操作:
  • 生产者回滚配置,切换回源集群即可。

阶段二:Consumer 切换到目标集群

第二阶段执行切换 Consumer 的接入配置,使 Consumer 连接到目标集群( AutoMQ 实例)。切换过程的流量拓扑如下图所示: 阶段二流量拓扑图:消费者切换到目标 AutoMQ 实例 操作步骤:
  • Consumer 分批次修改接入参数重启应用,连接到 AutoMQ 实例。
  • Kafka Linking 自动判断 Consumer Group 切流完成,并自动提升 Consumer Group,是 Consumer 从新集群继续消费。
切换 Consumer 之前,应满足以下条件确保 Consumer 的消费位点大于等于 AutoMQ 实例上当前 Topic 已同步消息的最小位点,以免切换后部分消息无法消费。举例:源集群 Consumer 消费 Partition X 的消费位点为 100,AutoMQ 实例 Partition X 的最小位点小于等于 100,则可以切换,否则应继续等待直到满足条件。
预期效果:
  • 生产流量仍然维持上一阶段的状态,继续代理回源集群并同步到目标集群。
  • Consumer Group 会继续源集群的消费位点,继续消费,不受影响。
回滚操作:
  • Consumer 回滚配置,切换回源集群即可。
因源集群的消费位点不会自动更新,回滚前建议先重置位点,否则可能会产生消费重复。

阶段三:提升 Mirror Topic 状态

在确保所有的 Producer 和 Consumer 都已经完成切换并且符合预期后,即可提升 Mirror Topic 的状态,停止写流量代理和同步。 AutoMQ 控制台中提升 Mirror Topic 状态的操作步骤 操作步骤:
  • 在 Consumer 切换完成后,建议观察一段时间,确保 Producer、Consumer 应用运行符合预期。
  • 确认符合预期后,在 AutoMQ 控制台,点击提升 Mirror Topic,停止流量代理和复制。
提升 Mirror Topic 之前务必确保以下条件:所有 Producer 已经切换完成。所有 Consumer Group 已经切换完成。
预期效果:
  • Mirror Topic 的读写全部集中在目标集群,不再代理回源集群。
回滚操作:
  • Mirror Topic 提升后目标集群的消息数据多于源集群,此时回滚需要注意消息数据不一致。
当步骤 2 中 Kafka Link 内所有的 Mirror Topic 都已经完成迁移和提升后,迁移任务已经完成,可以删除 Kafka Link。 迁移完成后删除 Kafka Link 的操作界面