一、操作背景
注意:迁移消息服务只迁移消息生产和消费链路,并不会迁移原 RocketMQ 集群上的消息数据。目前仅适用于迁移到专享集群,共享集群会在公测结束后开始支持。
二、迁移步骤
这里说明使用双读双写和分批发布方案迁移消息服务的方法。迁移过程中,生产者集群和消费者集群可并行在原 RocketMQ 集群和新 RocketMQ 集群上同时生产或消费消息,不会因迁移产生数据积压,业务可平滑过渡。具体方案和操作流程,请参见下图。
具体步骤如下:
1. TDMQ RocketMQ 集群创建完成,相关元数据迁移完成,并在控制台获取需要的客户端信息,如新集群的接入点 AccessKey 和 SecretKey 。
2. 切换消费者集群中部分节点的接入信息,将这部分消费者接入到新版 RocketMQ 集群。切换的这部分消费者将消费新版 RocketMQ 集群中的消息,剩余消费者继续消费原 RocketMQ 集群中的消息。
3. 切换生产者集群中部分节点的接入信息,将这部分生产者接入到新版 RocketMQ。切换的这部分生产者将发送消息到新版 RocketMQ 集群中;剩余的生产者还是将消息发送到旧版 RocketMQ 集群中。为了防止消息的重复或丢失,可以事先做好消息消费的幂等逻辑。
4. 将剩余的生产者全部接入到新的 RocketMQ 集群上。此时所有消息将全部被发送到新版 RocketMQ 集群中。
5. 检查原 RocketMQ 集群是否有堆积的消息没有消费,确认原 RocketMQ 集群没有堆积或者未处理的消息后,将剩余的消费者全部接入到新版 RocketMQ 集群上。完成整个数据流的迁移操作。
三、顺序问题
由于集群切换,切换过程中,消息顺序问题无法保证;切换的过程中会导致局部乱序。
四、消息重复
理论上不会重复,极端情况下会发生,例如切换过程中,消费者消费了消息,但是还未给服务端(原 RocketMQ 集群)ACK,这时会导致该消息进入重试队列导致重复消费。对消息做幂等处理逻辑可以规避这个问题,
五、消费延迟
读切换过程中,由于分区重新分配,需要进行队列和消费者客户端间的 rebalance,可能导致短暂的消费延迟现象。遇到该情况无需额外操作,切换完成后即可恢复。