tencent cloud

文档反馈

消息服务数据流迁移

最后更新时间:2024-01-18 10:07:30

    操作背景

    通过 元数据迁移任务,客户可以将自建的 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,可能导致短暂的消费延迟现象。遇到该情况无需额外操作,切换完成后即可恢复。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持