适用场景
为满足不同使用场景下的用户需求,TDMQ Pulsar 提供了专业集群、标准集群和虚拟集群三种产品形态。
虚拟集群由于其存在稳定性风险,我们已于2023年停止新增。标准版和专业集群具备更强的产品能力、更加完善的控制台(管理、续费、扩容等),为了提供更好的服务,对于您已经在使用中的虚拟集群,我们提供了集群间平滑迁移的能力,支持虚拟集群平滑迁移至标准/专业集群。
能力说明
集群的数据面迁移过程对用户几乎透明,即迁移过程平滑(接入点无需调整,用户业务代码无需改造)。
迁移过程:
1. 系统将根据专业集群的规格进行扣款。开始迁移时,在订单界面可以看到扣款状态为处理中;迁移过程中,若有问题发生回滚,订单自动退款;迁移完成后,订单状态为已完成且计时正式开始。
2. 在控制台专业集群列表界面,可以看到迁移后的集群信息,可以完成后续的管理、升配、续费等操作。
平滑迁移流程
操作入口
操作入口 1:通过 Pulsar 控制台 进入虚拟集群列表页面,单击您想升级的集群 ID 进入集群详情页面,在详情页面基本信息框右上角单击升级专业版、发起迁移。

操作入口 2:通过 Pulsar 控制台 进入虚拟集群列表页面,在操作列单击升级专业版发起迁移。

步骤 1:目标规格选择
目标规格选择页面将展示该集群近 15 天 TPS 与存储用量,系统会默认推荐合适的固定或弹性存储规格,便于您评估升级所需资源。
支持将虚拟集群升级为标准版/专业版集群,其中标准版仅支持弹性存储,专业版支持固定和弹性存储集群。请结合当前业务负载,参考产品选型,选择合适的集群规格。为了保障业务的高可用性与 SLA,建议开启“跨 AZ 部署”,以确保在发生可用区级故障时业务不受影响。

步骤 2:接入点扫描
部分接入点地址因集群创建时间较早或采用特殊网络连接方式,无法平滑迁移至新集群。升级步骤引导页面在选择目标规格后提供接入点扫描功能,点击开始扫描可自动完成扫描确认。
若出现检查结果无需修改,则可以直接进行下一步:

若检查结果为需更新,请将客户端地址更改为操作指引中的链接后重新扫描,并进入下一步。

您也可以在虚拟集群操作列找到新旧接入点地址进行查看,需要注意旧接入地址存在 Pulsar 和 HTTP 两种协议,新接入地址只支持 HTTP 协议。

步骤 3:发起迁移
发起升级,迁移动作开始执行。

迁移原理
技术方案
采用 Pulsar Geo Replication 方案,开启跨集群双向复制,可以实现数据和消息进度的同步,以满足集群迁移的需求。

迁移流程
当您在控制台发起迁移操作后,平台将自动启动发货流程。完成订单支付后,即可开始搭建新的专业集群。主要流程如下图所示:

1. 搭建目标集群:当您在控制台发起迁移,支付完成后,系统开始创建迁移目标集群。
2. 全局准备:目标集群创建完毕后,在待迁移的虚拟集群和目标集群之间,建立跨集群同步链路。
3. 命名空间迁移:迁移任务启动后,系统会扫描虚拟集群下的所有命名空间,生成命名空间列表,随后以命名空间为单位依次迁移流量。主要包含以下步骤:
3.1 元数据同步:将命名空间下的 Topic、配置、授权关系等元数据同步至目标集群。
3.2 消息数据同步:将命名空间下 Topic 留存在磁盘中的消息全部同步至目标集群,包括未消费的消息、已消费但尚未清理的消息。
3.3 消费进度同步:将每个 Topic 下的订阅进度同步至目标集群,以尽可能减少切换后的重复消息数。(由于同步存在时间差,重复消费无法完全避免,详见 可能出现的情况及解决方案)
3.4 切换接入点:前置准备就绪后,此步骤才真正开始切换流量至目标集群,存量连接仍连接虚拟集群、新连接接入目标集群;此时两集群间消息与消费进度均为双向同步,因此该过程不会丢消息。
3.5 滚动切流:触发 Topic 滚动 unload,使客户端存量连接断连重连,重连后存量连接全部切换到目标集群(该瞬间因断连重连,生产耗时会有一定抖动)。
3.6 连接检查:在销毁命名空间前,系统会检查是否有残留连接,确保客户端连接已迁移干净。
3.7 清理旧资源:单个命名空间迁移完成后,删除虚拟集群中该实例对应命名空间的所有数据。
4. 全局收尾:待所有命名空间均迁移完成后,执行一次集群级元数据的完全清除,迁移任务随即结束,该实例将从虚拟集群列表转移至目标集群列表。
5. 迁移完成:您可在控制台看到新的集群。
迁移核心特性:
迁移粒度:当前迁移粒度为命名空间级别,即逐个命名空间迁移,互不影响。
迁移顺序不可自定义:命名空间的顺序由内部按照 broker 排序决定,无法自定义迁移顺序。
双向同步保护:在迁移切流期间,虚拟集群与目标集群之间的消息及消费进度将实现双向同步,确保迁移过程中不丢失任何消息。
平滑切流:新连接接入目标集群,存量旧连接通过滚动 unload 逐步迁移,业务基本无感知。
可能出现的情况及解决方案
迁移期间操作限制:
请勿创建命名空间。
请勿对 Topic 进行创建、删除、修改等操作。
1. 消息重复
已实现通过 individual ack 的进度同步,以尽量减少迁移过程中重复消息的数量。但是迁移过程中的重复可能无法完全避免,通常重复时间不超过 1min,有需要请用户提前做好幂等处理。
2. 消息乱序
集群迁移都可能存在的一个问题,无论哪种方案都不能完全避免迁移过程中的乱序情况,需要提前周知消息的消费者。
3. 监控数据不准确
切换集群时,可能会造成瞬时监控数据不准确,通常 1-2 min 可以恢复。
4. 生产耗时抖动
切换集群时,可能会有短暂的生产耗时抖动,类似集群升级过程中的耗时抖动,通常 1min 内可以恢复。
5. 消息轨迹异常
数据同步的过程中,会有消费进度同步的消息产生,用户在使用消息查询时会看到此类消息。在迁移过程中查询消息详情,会有一定影响,可能出现无法查看的情况。
6. 迁移时长
整个迁移时长和命名空间的数量、生产流量以及消息存储的数据量有关。对于一个命名空间,1000TPS、100G 消息存储,通常在 1h 内可以完成集群迁移;数据量大的情况下,例如 1T 存储大约需要 2h。
7. 老集群保留时间
迁移完成后,腾讯云产研侧会等待 1-3 天,再将老物理集群上的资源清理掉。清理后,将无法再回滚。
8. 消息积压问题
迁移过程消费进度的同步是通过用户的主题进行的,所以用户主题中会有一些内部消息存在,这些消息在消费的时候会在服务端过滤掉,业务实际上并不会消费到这些消息。对于没有消费者订阅的主题,会出现消息堆积的情况。
9. 消息的复制范围
在消息的复制过程中,由于 Pulsar 的实现机制,只能保证复制老集群中 TTL 范围内的消息到新集群中。如果您的消息保留时间比较大,且需要同步保留时间范围内的所有数据,则需要先调整 TTL 配置。
10. 客户端断连
在迁移的最后阶段会触发主题 unload 操作,从而触发客户端 lookup,通常客户端 lookup 发起阶段会自动获取新集群地址。