> ## Documentation Index
> Fetch the complete documentation index at: https://docs.automq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 实施迁移方案

> 从 Apache Kafka 迁移到 AutoMQ：无需丢失消息数据且维护消费进度。同样保证生产者和消费者的流畅过渡，实现高效的数据迁移。

完成[前置条件梳理▸](/zh/automq-cloud/migrate-to-automq/prerequisites)的情况下，可以进行后续的迁移流程。本文详细介绍从 Apache Kafka 迁移到 AutoMQ 的方案以及实施流程。

## 迁移方案

使用 Kafka Linking 从 Apache Kafka 迁移到 AutoMQ，主要考虑如下工作：

* **消息数据同步** ：Kafka 存储了历史已消费和未消费的消息数据，迁移集群需要保证消息数据按需复制到新集群，不能丢失消息。

* **生产者切换：** 迁移工作除去数据同步，还需要在合适的时机切换生产者应用，使生产者连接目标集群生产新的消息。

* **消费者切换：** 迁移工作除去数据同步，还需要在合适的时机切换消费者应用，使消费者连接目标集群接续之前的消费进度继续消费消息。

整体迁移方案参考下图的流程：

<img alt="整体迁移方案流程图，包含消息数据同步、生产者切换和消费者切换三个步骤" src="https://mintcdn.com/automq/fL62XJ-sjry0eTzF/zh/automq-cloud/migrate-to-automq/executing-migration/1.webp?fit=max&auto=format&n=fL62XJ-sjry0eTzF&q=85&s=07bc187861ebf503ca4df98ff55910e5" width="2560" height="904" data-path="zh/automq-cloud/migrate-to-automq/executing-migration/1.webp" />

## 操作步骤

### 步骤 1：创建 Kafka Link，开始同步数据

在完成[前置条件梳理▸](/zh/automq-cloud/migrate-to-automq/prerequisites)后，已经明确当前需要迁移的源集群、目标集群、Topic、ConsumerGroup 范围，接下来开始创建迁移任务。

创建**Kafka Link** ，前点击**目标实例 >> Kafka Links** ，按照指引填写相关参数。

| **参数名称**<br />                 | **参数说明**<br />                                                                                                                                   |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Kafka Link Id**<br />        | <ul><li>含义：用来表示一组迁移任务，一般建议简短、易识别的名称。</li><li>约束：仅支持英文大小写字母、数字、中划线（-）、下划线（\_）</li></ul>                                                           |
| **源集群**<br />                  | 指定需要迁移的源集群，此处填写源集群的 Bootstrap 地址、ACL 身份识别参数。<br />                                                                                               |
| **目标集群**<br />                 | 指定迁移的目标集群，此处选择已经创建的 AutoMQ 实例。<br />                                                                                                             |
| **起始同步位置**<br />               | 指定迁移任务启动后同步消息的起始位置。支持如下选项：<br /><ul><li>**从最新位置：** Kafka Linking 只复制接下来产生的新消息到目标集群。该模式适合对冷读敏感，希望从当前时刻开始追齐两端集群的迁移场景。</li></ul>                    |
| **同步 Topic 列表**<br />          | 从源集群选择若干个 Source Topic，Kafka Linking 会在目标实例创建一一映射的 Mirror Topic。<br /><Danger><br />如果目标实例已经存在当前 Topic，则无法创建该 Mirror Topic。<br /></Danger><br /> |
| **同步 Consumer Group 列表**<br /> | 从源集群选择若干个 Consumer Group，Kafka Linking 会在目标实例创建一一映射的 Consumer Group。<br />                                                                       |

<img alt="Kafka Link 创建表单，包含源集群、目标集群和同步配置字段" src="https://mintcdn.com/automq/fL62XJ-sjry0eTzF/zh/automq-cloud/migrate-to-automq/executing-migration/2.webp?fit=max&auto=format&n=fL62XJ-sjry0eTzF&q=85&s=a0a0bf1fa3178fc6a76ba5caa83d8feb" width="2438" height="936" data-path="zh/automq-cloud/migrate-to-automq/executing-migration/2.webp" />

选择目标 topic 和 Consumer Group。

<img alt="Kafka Link 同步 Topic 和 Consumer Group 选择界面" src="https://mintcdn.com/automq/fL62XJ-sjry0eTzF/zh/automq-cloud/migrate-to-automq/executing-migration/3.webp?fit=max&auto=format&n=fL62XJ-sjry0eTzF&q=85&s=b23c68baec6cbd136dfbebedd600edbc" width="2452" height="782" data-path="zh/automq-cloud/migrate-to-automq/executing-migration/3.webp" />

3. 创建完成后，可以进入 Kafka Link 详情，查看指定的 Topic 和 Group 都已经进入**同步中** 状态。Kafka Link 创建完成后，同样支持添加新的 Topic、Consumer Group。可以按需添加待迁移的业务资源。

<Danger>
  如果在 Kafka Link 中删除 Mirror Topic、Consumer Group ，会从目标集群（AutoMQ 实例）中删除对应的 Topic 和 Consumer Group。此操作无法撤销，后续只能重新创建。
</Danger>

<img alt="Kafka Link 详情页，显示 Topic 和 Consumer Group 的同步状态" src="https://mintcdn.com/automq/fL62XJ-sjry0eTzF/zh/automq-cloud/migrate-to-automq/executing-migration/4.webp?fit=max&auto=format&n=fL62XJ-sjry0eTzF&q=85&s=0d45c7e28f190f9a98b0ca4579d9c1a1" width="2910" height="1384" data-path="zh/automq-cloud/migrate-to-automq/executing-migration/4.webp" />

### 步骤 2：切换生产者和消费者，执行迁移流程

当 Kafka Link 创建完成后，用户需要修改 Topic 的 Producer、Consumer 配置，将 Producer 和 Consumer 从源集群切换到目标集群，其主要包含以下三类操作：

* **生产者切流：** 更新生产者的接入参数，使其指向目标集群。

* **消费者切流：** 更新消费者的接入参数，使其指向目标集群。

* **提升 Mirror Topic 状态** ：在 AutoMQ 控制台选择 Mirror Topic 进行状态提升，提升操作本质上是控制 Kafka Linking 组件不再代理 Producer 写流量以及从源集群复制数据。

具体 Producer 和 Consumer 切流的操作步骤参考下方阶段：

#### 阶段一：**Producer 切换到目标集群**

迁移过程，首先切换 Producer 的接入配置，使 Producer 连接到目标集群（ AutoMQ 实例）。切换过程的流量拓扑如下图所示：

<img alt="阶段一流量拓扑图：生产者切换到目标 AutoMQ 实例" src="https://mintcdn.com/automq/fL62XJ-sjry0eTzF/zh/automq-cloud/migrate-to-automq/executing-migration/5.webp?fit=max&auto=format&n=fL62XJ-sjry0eTzF&q=85&s=6a1692fa980907619f5ffa8dac153e8e" width="2560" height="1080" data-path="zh/automq-cloud/migrate-to-automq/executing-migration/5.webp" />

**操作步骤：**

* Producer 分批次修改接入参数重启应用，使生产流量切换到目标的 AutoMQ 实例。

**预期效果：**

* 生产流量分批次 Rolling 目标实例，预期生产流量不停机、无影响。

* 源集群的消费者继续消费所有的消息，无影响。

* 源集群消息会通过 Replicate 任务同步到 AutoMQ。

**回滚操作：**

* 生产者回滚配置，切换回源集群即可。

#### 阶段二：**Consumer 切换到目标集群**

第二阶段执行切换 Consumer 的接入配置，使 Consumer 连接到目标集群（ AutoMQ 实例）。切换过程的流量拓扑如下图所示：

<img alt="阶段二流量拓扑图：消费者切换到目标 AutoMQ 实例" src="https://mintcdn.com/automq/fL62XJ-sjry0eTzF/zh/automq-cloud/migrate-to-automq/executing-migration/6.webp?fit=max&auto=format&n=fL62XJ-sjry0eTzF&q=85&s=966a0454f2e60dfc9064b3a90e0ac90b" width="2560" height="1080" data-path="zh/automq-cloud/migrate-to-automq/executing-migration/6.webp" />

**操作步骤：**

* Consumer 分批次修改接入参数重启应用，连接到 AutoMQ 实例。

* Kafka Linking 自动判断 Consumer Group 切流完成，并自动提升 Consumer Group，是 Consumer 从新集群继续消费。

<Danger>
  **切换 Consumer 之前，应满足以下条件**

  确保 Consumer 的消费位点大于等于 AutoMQ 实例上当前 Topic 已同步消息的最小位点，以免切换后部分消息无法消费。

  举例：源集群 Consumer 消费 Partition X 的消费位点为 100，AutoMQ 实例 Partition X 的最小位点小于等于 100，则可以切换，否则应继续等待直到满足条件。
</Danger>

**预期效果：**

* 生产流量仍然维持上一阶段的状态，继续代理回源集群并同步到目标集群。

* Consumer Group 会继续源集群的消费位点，继续消费，不受影响。

**回滚操作：**

* Consumer 回滚配置，切换回源集群即可。

<Danger>
  因源集群的消费位点不会自动更新，回滚前建议先重置位点，否则可能会产生消费重复。
</Danger>

#### 阶段三：**提升 Mirror Topic 状态**

在确保所有的 Producer 和 Consumer 都已经完成切换并且符合预期后，即可提升 Mirror Topic 的状态，停止写流量代理和同步。

<img alt="AutoMQ 控制台中提升 Mirror Topic 状态的操作步骤" src="https://mintcdn.com/automq/fL62XJ-sjry0eTzF/zh/automq-cloud/migrate-to-automq/executing-migration/7.webp?fit=max&auto=format&n=fL62XJ-sjry0eTzF&q=85&s=8e76dcf95951cc347d7488107de13c4a" width="2560" height="1080" data-path="zh/automq-cloud/migrate-to-automq/executing-migration/7.webp" />

**操作步骤：**

* 在 Consumer 切换完成后，建议观察一段时间，确保 Producer、Consumer 应用运行符合预期。

* 确认符合预期后，在 AutoMQ 控制台，点击提升 Mirror Topic，停止流量代理和复制。

<Danger>
  **提升 Mirror Topic** 之前务必确保以下条件：

  所有 Producer 已经切换完成。

  所有 Consumer Group 已经切换完成。
</Danger>

**预期效果：**

* Mirror Topic 的读写全部集中在目标集群，不再代理回源集群。

**回滚操作：**

* Mirror Topic 提升后目标集群的消息数据多于源集群，此时回滚需要注意消息数据不一致。

### 步骤 3： 迁移完成，删除 Kafka Link

当步骤 2 中 Kafka Link 内所有的 Mirror Topic 都已经完成迁移和提升后，迁移任务已经完成，可以删除 Kafka Link。

<img alt="迁移完成后删除 Kafka Link 的操作界面" src="https://mintcdn.com/automq/fL62XJ-sjry0eTzF/zh/automq-cloud/migrate-to-automq/executing-migration/8.webp?fit=max&auto=format&n=fL62XJ-sjry0eTzF&q=85&s=4ff0dcd6f1ba8f0e1c0bd00bcfeabfbe" width="2468" height="1360" data-path="zh/automq-cloud/migrate-to-automq/executing-migration/8.webp" />
