Skip to main content

实施迁移方案

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

迁移方案

从 Apache Kafka 迁移到 AutoMQ,主要考虑如下工作:

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

  • 消费进度元数据迁移:Kafka 消费者在源集群已经消费处理的消费进度等元数据需要在新集群重建,以免切换到新集群后丢失进度重新消费,产生大量重复。

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

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

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

其中各迁移步骤说明如下:

  • 步骤1:创建迁移任务,同步数据。参考概述▸,AutoMQ Cloud 提供了开箱即用的迁移工具,支持用户分批次创建迁移任务,将源集群的 Topic 消息以及相关消费者组的元数据同步到目标集群。

  • 步骤2:观察同步进度,等待同步接近完成。AutoMQ Cloud 迁移工具支持任务管理和详情查看。用户需观察同步任务的堆积消息数以及同步延迟指标,等待两个指标接近于 0。

观察同步接近完成是为了缩短后续切换应用的观察等待时间。

  • 步骤3:停止源集群消费者。切换应用需要先切换消费者,建议先停止消费者应用,等待源集群的消费进度数据同步到目标集群后再切换到目标集群。

建议等待一段时间,使消费进度尽可能同步完成。该时间默认为 10s。

应用也可先在目标集群启动相同 Consumer Group 的新消费者,然后再停止源集群的消费者。这样会导致一段时间内两端同时消费:

  • 步骤4:切换消费者到目标集群。重新使用新的接入点地址启动消费者,连接到 AutoMQ 目标集群。

根据 MirrorMaker2 的技术实现,步骤 3 和步骤 4过程中消费者可能会产生一定的消费重复。如果期望降低重复概率,可以在迁移任务的高阶参数中自定义配置。

  • 步骤5:停止源集群生产者。消费者切换完成后,需要切换生产者。和步骤 3 类似,需要先停止源集群的消息写入,等待所有的消息数据同步到目标集群。

停止生产者是为了避免目标集群同时接收来自生产者和 MirrorMaker2 的消息写入,这可能导致消息乱序。

  • 步骤6:切换生产者到目标集群。观察迁移任务的堆积和延迟,确认同步堆积为 0 后,即可重新使用新的接入点地址启动生产者,连接到 AutoMQ 目标集群,完成整个迁移任务。

在完成迁移并确认应用符合预期后,建议尽快删除迁移任务以释放机器资源,防止持续产生资源费用。

迁移流程

步骤 1:创建迁移任务,同步数据

在完成前置条件梳理▸后,已经明确当前需要迁移的源集群、目标集群、Topic、ConsumerGroup 范围,接下来开始创建迁移任务。

  1. 创建源集群集成配置。使用 Admin 或者 Operator 角色的用户登录环境控制台,前往集成页面创建 Apache Kafka 集成。

每个源集群只需要创建一个集成即可,后续多个迁移任务可以复用该集成配置。

Apache Kafka 集成配置同样支持其他 Kafka 发行版,只需要填写对应的接入点参数即可。

创建 Apache Kafka 集成,需要填写如下参数:

  • 集成名称:用作标识源集群的别名,用户可自定义,方便后期识别。

  • 接入点协议:根据源集群的类型,选择合适的接入点协议。

  • 接入点地址:填写对应协议的 Bootstrap 地址列表。

AutoMQ 迁移工具目前支持 PLAINTEXT协议,暂不支持 SASL_PLAINTEXT、SSL 和 SASL_SSL 协议。如有需求,请及时联系 AutoMQ 技术人员获得帮助和支持。

  1. 创建迁移任务。前往迁移页面创建迁移任务,按照指引填写相关任务参数。

其中,需要根据实际情况填写如下参数:

参数名称
参数说明
任务名称
用来表示一组迁移任务,一般建议简短、易识别的短语。
源集群
指定需要迁移的源集群,此处选择上一步创建的 Apache Kafka 集成。
目标集群
指定迁移的目标集群,此处选择已经创建的 AutoMQ 实例。
起始同步位置
指定迁移任务启动后同步消息的起始位置。支持如下选项:
  • 从最早位置: 迁移任务会将源集群中待迁移 Topic 的所有历史消息(即使已经消费过)全量复制到目标集群。该模式适合需要保留历史数据的迁移场景。
  • 从最新位置: 迁移任务只复制接下来产生的新消息到目标集群。该模式适合对冷读敏感,希望从当前时刻开始追齐两端集群的迁移场景。
  • 从指定时间: 介于前两种模式之间,支持从指定时间点开始复制消息数据。

生产环境如果历史数据规模很大,选择从最早位置同步时需要注意读取历史消息造成的冷读压力。如果对迁移时效要求不高,建议从最新位置开始同步,直到两端集群数据接近一致。

待同步 Topic 列表
设置迁移任务覆盖的 Topic 列表。该列表支持通配符输入,可以一次性配置多个 Topic。

AutoMQ 迁移工具支持自动同步 Topic 动态更新功能,一旦创建同步任务后,无论是新建 Topic 还是更改现有 Topic 的分区数,只要符合当前列表条件,都会自动同步到目标集群。

除了基础配置外,AutoMQ 迁移任务还提供以下可选配置,用于自定义功能行为:

参数名称
参数说明
是否同步消费进度
建议开启,开启后迁移任务会将源集群 ConsumerGroup 的消费进度映射到目标集群,确保消费者切换后可以接续之前的进度继续消费,从而避免大量的重复处理。

需要注意的是,MirrorMaker2 同步的两端集群消息的位点是不一致的,因此源集群的消费进度会重新映射到目标集群。该过程可能会有少量的位点回退。

是否运行健康检查
迁移任务可以定期执行心跳测试,验证同步链路是否畅通。开启后会定期向源集群发送测试消息,并同步到目标集群,以验证完整性。这一配置默认为开启状态。
是否自动感知 Topic 变更
迁移任务可以在任务启动后的运行过程中自动感知源集群 Topic 的变更,例如源集群新创建了 Topic,也可以自动同步到目标集群。该配置默认开启。
是否自动感知 Group 变更
迁移任务可以在任务启动后的运行过程中自动感知源集群 Consumer Group 的变更,例如源集群有新的 Group 上线,也可以自动同步到目标集群。该配置默认开启。
待排除 Topic 列表
如果在待同步 Topic 列表中使用了通配符,但又需要排除掉部分 topic 不希望同步,可以设置待排除 Topic,去除相关 topic 的同步。

该配置默认不同步 Kafka 系统 topic,即默认会强制排除“.*[-.]internal, .*.replica, __.*”。

待排除 Group 列表
如果开启了 Group 消费进度同步,但又需要排除掉部分 Consumer Group 不希望同步,可以设置待排除 Group,去除相关 Group 的状态同步。

该配置默认不同步 Kafka 系统 Group,即默认会强制排除“console-consumer-.*, connect-.*, __.*”。

步骤 2:观察同步进度,等待同步接近完成

确认创建迁移任务后,可以前往任务管理页面和详情页面观察同步进度,等待数据同步任务的运行。

  1. 查看任务列表,了解当前同步任务的运行概要信息。

AutoMQ 迁移工具在任务列表页提供概要信息展示:

  • 同步延迟:同步延迟是指迁移 Topic 的消息从源集群生产到同步完成的耗时,一个迁移任务内涉及到多个 Topic时,取所有 Topic 延迟的最大值。

  • 同步堆积数:同步堆积数是指迁移 Topic 里所有已经产生但还未同步的消息数量,一个迁移任务内涉及到多个 Topic时,取所有 Topic 堆积数的总和。

  1. 查看任务详情,了解迁移任务的配置详情、运行状态、worker 信息。在同步任务执行过程中,用户可以根据需求临时暂停或者恢复任务,迁移任务可以继续之前的同步。

  2. 等待同步接近完成。参考迁移方案的描述,需要定期观察迁移任务的同步延迟和同步堆积数指标。建议当同步延迟小于 1 分钟时准备下一步骤的应用切换。

步骤 3:停止源集群消费者

观察步骤 2 完成后,开始迁移消费者应用。建议先停止源集群消费者再切换到目标集群。

  • 停止源集群消费后,源集群的消费位点不再更新,即可等待同步到目标集群。

  • 同步完成后,再切换消费者到目标集群,这样可以避免源和目标集群内重复消费。

步骤 4:切换消费者到目标集群

步骤 3 完成后,修改消费者配置中的接入点,替换为 AutoMQ 实例提供的接入点,重启应用。

步骤 5:停止源集群生产者

对于每一个 Topic,需要确保重复步骤 3 和步骤 4将当前 Topic 的所有消费者都已经切换完成,即可停止源集群生产者。

停止生产者是为了避免目标集群同时接收来自生产者和 MirrorMaker2 的消息写入,这可能导致消息乱序。

步骤 6:切换生产者到目标集群

  1. 观察等待 Topic 同步完成。步骤 5 完成后,需要前往任务详情页 -> 状态详情页,观察指定 Topic 同步延迟、同步堆积数两者必须降为 0,确保该 Topic 的数据全部同步完成。

  2. 修改生产者配置中的接入点。替换为 AutoMQ 实例提供的接入点,重启应用。此时新的消息将发送到 AutoMQ 目标实例。

切换生产者后,需要持续观察 Topic 的上下游应用,确认是否符合预期。

步骤 7:重复执行步骤 3~步骤 6,直到完成迁移,删除迁移任务

  1. 重复检查所有 Topic 迁移是否完成。步骤 3 到步骤 6 是按照 Topic 和 Topic 关联的生产者、消费者应用的粒度进行操作。因此,需要重复检查直到当前迁移任务中所有的 Topic 都已经完成迁移。

  2. 删除迁移任务。完成所有 Topic 的迁移后,点击确认删除任务, AutoMQ 会清理底层的机器资源和配置信息。

删除迁移任务后,无法恢复,即使重新创建相同 Topic 的迁移任务,也将被视为全新任务,不会继续之前的迁移状态。因此,在删除任务之前,请确保当前迁移任务已成功完成工作。

回滚流程

针对迁移流程中各阶段,如果出现非预期异常且无法短时间定位原因,用户可以按照如下流程尝试回滚操作并关注回滚带来的影响。

迁移阶段
回滚方案
回滚影响
步骤 1,创建任务
  • 删除任务
  • 删除目标实例的 Topic、ConsumerGroup,清理已经同步的数据
该阶段由于尚未切换应用,对应用无影响
步骤 2,观察同步进度
  • 删除任务
  • 删除目标实例的 Topic、ConsumerGroup,清理已经同步的数据
该阶段由于尚未切换应用,对应用无影响
步骤 3,已经停止源集群消费者
  • 恢复源集群消费者,回滚到步骤 2 阶段
数据不影响,仅造成消费暂停和延迟
步骤 4,已经切换消费者到目标集群
  • 停止目标集群消费者,切换回源集群接入点,回滚到步骤 2 阶段
回滚到源集群会重复消费切换期间的数据
步骤 5,已经停止源集群生产者
  • 恢复源集群生产者,回滚到步骤 4 阶段
回滚到源集群会重复消费切换期间的数据
步骤 6,已经切换生产者到目标集群
  • 停止目标集群生产者,切换回源集群接入点,回滚到步骤 4 阶段
步骤 6 期间生产到目标集群的消息无法反向同步回源集群,需要应用处理
步骤 7,已经删除迁移任务
  • 删除任务后无法回滚
不涉及

相关参考

关于 AutoMQ Cloud 提供的迁移工具和迁移方案,希望了解更多运行原理,可以参考如下内容: