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

操作步骤
步骤 1:创建 Kafka Link,开始同步数据
在完成前置条件梳理▸后,已经明确当前需要迁移的源集群、目标集群、Topic、ConsumerGroup 范围,接下来开始创建迁移任务。 创建Kafka Link ,前点击目标实例 >> Kafka Links ,按照指引填写相关参数。
控制台中的候选列表来自源集群 Kafka API。输入搜索关键词后,控制台按名称包含关系匹配资源,例如输入
order 可以匹配 prod-order-v1;每次最多展示 100 条匹配结果。候选资源还会按以下规则过滤:
- Source Topic: 展示 Kafka Linking 源端身份有权限查看、且未被识别为内部 Topic 的 Topic。不展示 Kafka 元数据标记的内部 Topic,以及名称以
__或.开头、以-internal或.internal结尾的 Topic。 - Source Consumer Group: 展示 Kafka Linking 源端身份有权限查看、
protocolType为consumer或空值,且 Group ID 未命中产品内部前缀的 Group。不展示其他协议类型的 Group,例如 Kafka Connect 使用的connect、部分实现中显示为connector的 Group;也不展示 Group ID 以sys-cmp或karapace-autogenerated开头的产品内部 Group。
如果目标实例已经存在与所选 Source Topic 同名的 Topic,则无法创建对应的 Mirror Topic。请先处理同名 Topic 冲突,再将该 Source Topic 添加到 Kafka Link。


- 创建完成后,可以进入 Kafka Link 详情,查看指定的 Topic 和 Group 都已经进入同步中 状态。Kafka Link 创建完成后,同样支持添加新的 Topic、Consumer Group。可以按需添加待迁移的业务资源。
如果在 Kafka Link 中删除 Mirror Topic、Consumer Group ,会从目标集群(AutoMQ 实例)中删除对应的 Topic 和 Consumer Group。此操作无法撤销,后续只能重新创建。

步骤 2:切换生产者和消费者,执行迁移流程
当 Kafka Link 创建完成后,用户需要修改 Topic 的 Producer、Consumer 配置,将 Producer 和 Consumer 从源集群切换到目标集群,其主要包含以下三类操作:- 生产者切流: 更新生产者的接入参数,使其指向目标集群。
- 消费者切流: 更新消费者的接入参数,使其指向目标集群。
- 提升 Mirror Topic 状态 :在 AutoMQ 控制台选择 Mirror Topic 进行状态提升,提升操作本质上是控制 Kafka Linking 组件不再代理 Producer 写流量以及从源集群复制数据。
阶段一:Producer 切换到目标集群
迁移过程,首先切换 Producer 的接入配置,使 Producer 连接到目标集群( AutoMQ 实例)。切换过程的流量拓扑如下图所示:
- Producer 分批次修改接入参数重启应用,使生产流量切换到目标的 AutoMQ 实例。
- 生产流量分批次 Rolling 目标实例,预期生产流量不停机、无影响。
- 源集群的消费者继续消费所有的消息,无影响。
- 源集群消息会通过 Replicate 任务同步到 AutoMQ。
- 生产者回滚配置,切换回源集群即可。
阶段二:Consumer 切换到目标集群
第二阶段执行切换 Consumer 的接入配置,使 Consumer 连接到目标集群( AutoMQ 实例)。切换过程的流量拓扑如下图所示:
- Consumer 分批次修改接入参数并滚动发布,使实例逐步连接到 AutoMQ 实例。
-
对于使用
subscribe和group.id参与 Group 管理的标准 Consumer,目标 Mirror Group 仍为LINKING时,已切换到目标端的实例无法获得分区分配,不会开始消费。随着源端实例逐批退出,剩余源端实例需要承担全部消费流量,请控制滚动批次并监控源端处理能力和积压。 - 源端 Consumer 实例全部退出后,数据面检测到源 Group 已无活跃成员并自动提升 Consumer Group。数据面每 10 秒调度一次已登记的 Group;如果上一次检查时源 Group 仍有活跃成员,同一 Group 默认至少间隔 30 秒再次检查。
-
Consumer Group 提升、目标端 rebalance 和分区分配完成之前,会存在短暂消费暂停。必须等 Group 进入
PROMOTED,并确认目标 Consumer 已获得分区分配且消费进度持续推进。
切换 Consumer 之前,应满足以下条件对每个分区确认 Consumer 的实际启动位点处于 AutoMQ 实例当前 Topic 的可读范围内:例如,Consumer 在 Partition X 的实际启动位点为 100:若目标端可读范围为
[80, 150],则可以切换;若为 [120, 150],说明位点 100 对应的历史消息已不可读;若为 [80, 90],说明目标端尚未复制到位点 100,应继续等待目标端追平。实际启动位点可能来自 Kafka Consumer Group 已提交位点、Flink checkpoint/savepoint 或应用自管存储。详细判断方法请参考 Kafka Linking 最佳实践。- 生产流量仍然维持上一阶段的状态,继续代理回源集群并同步到目标集群。
- Consumer Group 会继续源集群的消费位点,继续消费,不受影响。
- Consumer 回滚配置,切换回源集群即可。
因源集群的消费位点不会自动更新,回滚前建议先重置位点,否则可能会产生消费重复。
阶段三:提升 Mirror Topic 状态
在确保所有的 Producer 和 Consumer 都已经完成切换并且符合预期后,即可提升 Mirror Topic 的状态,停止写流量代理和同步。
- 在 Consumer 切换完成后,建议观察一段时间,确保 Producer、Consumer 应用运行符合预期。
- 确认符合预期后,在 AutoMQ 控制台,点击提升 Mirror Topic,停止流量代理和复制。
提升 Mirror Topic 之前务必确保以下条件:
-
所有普通 Producer 实例已连接目标 AutoMQ,且没有业务 Producer 仍使用源集群接入点直接写入。Kafka Linking 在
LINKING阶段仍会连接源集群,因此不能仅根据源集群存在连接判断业务 Producer 尚未切换。 - 对事务型 Producer,源端实例已停止、事务已结束、目标端已追平,并且目标端事务型 Producer 尚未启动。
- 所有 Consumer 实例已连接目标端,源 Consumer Group 已无活跃成员,Consumer Group 已完成提升且目标消费者运行稳定。
- 复制延迟已收敛,没有持续的网络、认证或请求错误,并已明确提升后的回滚和数据对账方案。
- Mirror Topic 的读写全部集中在目标集群,不再代理回源集群。
- Mirror Topic 提升后目标集群的消息数据多于源集群,此时回滚需要注意消息数据不一致。
步骤 3: 迁移完成,删除 Kafka Link
确认 Kafka Link 中全部 Mirror Topic 和 Consumer Group 均已完成提升,并且目标实例上的生产、消费和关键业务结果通过验收及观察窗口后,可以直接删除 Kafka Link。删除 Kafka Link 标志着本次迁移彻底结束。
完成迁移时只删除 Kafka Link 本身。不要删除 Kafka Link 中已经提升的 Mirror Topic 或 Consumer Group;该操作会真实删除目标 AutoMQ 实例中对应的 topic 或 Group。