消息服务数据流迁移

最近更新时间:2022-10-25 15:58:57

我的收藏

操作背景

通过 元数据迁移任务,客户可以将自建的 RocketMQ 集群的元数据同步到 TDMQ RocketMQ 上。在元数据迁移完成之后,客户需要修改生产者集群和消费者集群的接入信息,将生产者集群和消费者集群从旧自建的 RocketMQ 迁移到 TDMQ RocketMQ 版上,最终实现所有的消息收发业务都在新的 RocketMQ 集群上进行。
说明
迁移消息服务只迁移消息生产和消费链路,并不会迁移原 RocketMQ 集群上的消息数据。目前仅适用于迁移到专享集群,共享集群会在公测结束后开始支持。

迁移步骤

本文主要介绍使用双读双写分批发布方案迁移消息服务的方法。迁移过程中,生产者集群和消费者集群可并行在原 RocketMQ 集群和新 RocketMQ 集群上同时生产或消费消息,不会因迁移产生数据积压,业务可平滑过渡。具体方案和操作流程,请参见下图。



具体步骤如下:
1. TDMQ RocketMQ 集群创建完成,相关元数据迁移完成,并在控制台获取需要的客户端信息,如新集群的接入点 AccessKey 和 SecretKey 。
2. 切换消费者集群中部分节点的接入信息,将这部分消费者接入到新版 RocketMQ 集群。切换的这部分消费者将消费新版 RocketMQ 集群中的消息,剩余消费者继续消费原 RocketMQ 集群中的消息。
3. 切换生产者集群中部分节点的接入信息,将这部分生产者接入到新版 RocketMQ。切换的这部分生产者将发送消息到新版 RocketMQ 集群中;剩余的生产者还是将消息发送到旧版 RocketMQ 集群中。为了防止消息的重复或丢失,可以事先做好消息消费的幂等逻辑。
4. 将剩余的生产者全部接入到新的 RocketMQ 集群上。此时所有消息将全部被发送到新版 RocketMQ 集群中。
5. 检查原 RocketMQ 集群是否有堆积的消息没有消费,确认原 RocketMQ 集群没有堆积或者未处理的消息后,将剩余的消费者全部接入到新版 RocketMQ 集群上。完成整个数据流的迁移操作。
注意
如您没有按照上述顺序进行切换,如先切换生产者再切换消费者,可能导致消息丢失的情况。
切换剩余消费者之前,请确保原 RocketMQ 集群中的消息已全部消费完,否则可能会导致消费遗漏。您可以通过查看原 RocketMQ 集群中的消息堆积量来判断消息是否消费完成。

迁移整体交互流程图





可能存在的问题

顺序问题

由于集群切换,切换过程中,消息顺序问题无法保证;切换的过程中会导致局部乱序。

消息重复

理论上不会重复,极端情况下会发生,例如切换过程中,消费者消费了消息,但是还未给服务端(原 RocketMQ 集群)ACK,这时会导致该消息进入重试队列导致重复消费。对消息做幂等处理逻辑可以规避这个问题,

消费延迟

读切换过程中,由于分区重新分配,需要进行队列和消费者客户端间的 rebalance,可能导致短暂的消费延迟现象。遇到该情况无需额外操作,切换完成后即可恢复。