和開源Apache RocketMQ相比,阿里雲雲訊息佇列 RocketMQ 版具有更高的穩定性、安全性及更完善的營運體系。您可以將開源RocketMQ叢集遷移到雲訊息佇列 RocketMQ 版上以獲得更好的業務體驗。本文為您介紹如何使用雲訊息佇列 RocketMQ 版的遷移工具將開源自建的Apache RocketMQ遷移至阿里雲雲訊息佇列 RocketMQ 版。
前提條件
角色名稱:AliyunServiceRoleForRMQMigration
權限原則:AliyunServiceRolePolicyForRMQMigration
許可權說明:允許雲訊息佇列 RocketMQ 版使用該角色擷取訪問Virtual Private Cloud的許可權。
注意事項
在遷移訊息階段,從写目标集群冗余读切換到读写目标集群時,需要檢查源叢集的訊息消費是否已完成,並確認是否存在未出隊的定時訊息。如果所有訊息均已消費完成,則可以切換到读写目标集群狀態。
在遷移任務尚未完成之前,不能下線開源自建的Apache RocketMQ叢集。
遷移操作流程
開源RocketMQ叢集遷移到雲訊息佇列 RocketMQ 版的操作流程如下圖所示:
根據自建開源RocketMQ的版本、功能使用方式評估遷移上雲的風險和相容性,確認遷移任務的目標和範圍。
錄入自建叢集的網路及節點資訊,雲訊息佇列 RocketMQ 版會按照最小範圍打通網路設定,為後期運行切流操作和切流檢查提供許可權。
雲訊息佇列 RocketMQ 版讀取自建叢集的Topic和Group中繼資料資訊,並同步複製到目標雲訊息佇列 RocketMQ 版執行個體上。
確認此次遷移範圍內的所有生產者以及消費者,將源叢集訊息收發代碼中的存取點修改為目標阿里雲雲訊息佇列 RocketMQ 版執行個體的存取點。
按照Topic粒度,分階段執行切流操作。
完成遷移任務,下線自建開源RocketMQ叢集。
步驟一:遷移評估
執行遷移操作前,您需要從技術層面對遷移任務進行評估,並根據實際業務運行情況確認遷移範圍,分批次完成遷移上雲。
技術評估:協助您判斷當前自建RocketMQ叢集的用戶端等環境資訊是否符合遷移要求,明確遷移前和遷移後的功能支援情況。
遷移範圍確認:建議您根據業務的重要程度和業務應用的耦合程度,分批次灰階遷移,穩定後再擴大遷移範圍,逐步完成遷移任務。
技術評估
自建叢集約束:評估源自建RocketMQ叢集是否符合如下約束,若其中有部分約束項不滿足要求,請提交工單諮詢解決方案。
約束項
說明
部署版本
支援Apache RocketMQ 5.x、 4.x服務端版本。
網路要求
源叢集需要部署在阿里雲VPC網路環境中,若部署線上下IDC環境則需要支援VPC私網地址訪問。
支援地區
僅以下地區支援使用遷移上雲功能:華東1(杭州)、華東2(上海)、華北2(北京)、華南1(深圳)、華北3(張家口)、美國(矽谷)、新加坡和日本(東京)。
參數約束
訊息大小:
不超過4 MB。
訊息儲存時間長度:
最短24小時。
最長720小時。
定時訊息最大延遲時間:
訂用帳戶、隨用隨付標準版,Serverless標準版與專業版最大支援7天。
訂用帳戶、隨用隨付專業版,鉑金版最大支援40天。
更多參數約束,請參見配額與限制。
SDK版本約束:遷移方案秉承最小變更原則,一般情境下支援用戶端SDK版本直接升級,若是大版本變更一般涉及大量新功能特性變更和穩定性最佳化,建議您遷移的同時升級SDK版本。
SDK類型
支援語言
SDK版本
是否需要升級
Apache RocketMQ Remoting SDK
Java SDK Maven依賴樣本如下:
<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>{version}</version> </dependency>存取點配置格式如下:
producer.setNamesrvAddr(“xxx:9876”); consumer.setNamesrvAddr(“xxx:9876”);
Java
5.x SDK
預設相容,無需升級。
Java、C++、
4.x SDK
如果源叢集使用了PullConsumer、DefaultLitePullConsumer、DefaultPullConsumer介面,需要升級到5.x系列SDK。更多資訊,請參見SDK參考概述。
說明若您採用RocketMQ整合Flink的方式進行訊息收發,在遷移時建議使用最新版本的SDK(需要自行編譯)。具體資訊請參見rocketmq-flink。
遷移範圍確認
雲訊息佇列 RocketMQ 版支援Topic層級的遷移粒度,能達到分批次、可灰階、可復原的效果,有效降低大面積變更的風險。
執行遷移操作前,需要確認Topic涉及的業務範圍,規劃遷移批次。
Topic列表選擇:根據自建叢集粒度選擇Topic,同時按照業務重要程度規劃遷移批次,建議從非核心業務的Topic開始遷移。
業務上下遊配合:選擇Topic後,需要通知所有使用該Topic的上下遊業務應用(生產者、消費者應用)準備切換存取點。
重要請務必通知到所有遷移Topic涉及的上下遊業務應用,如果業務應用程式切換執行個體存取點遺漏,可能會造成訊息消費延遲等風險。
步驟二:配置網路資訊
建立遷移任務並配置源自建叢集的網路資訊,用於雲訊息佇列 RocketMQ 版遷移工具讀取源自建叢集的中繼資料資訊,並實現後續遷移任務的控制。
注意事項
雲訊息佇列 RocketMQ 版遷移工具按照最小範圍粒度僅訪問源自建叢集如下資訊:
Topic中繼資料配置資訊
Group中繼資料配置資訊
Topic動態路由註冊資訊
消費者串連資訊及消費堆積資訊
不會訪問源叢集其他資訊,也不會對源自建叢集的配置資訊做任何寫操作,因此不會對源自建叢集的運行造成影響。
網路資訊配置完成後請務必仔細檢查,確認無誤後再進行下一步操作,一旦進入下一步則無法回退修改網路設定資訊,只能重新建立任務。
操作步驟
參數配置說明
表 1. 源叢集網路設定參數
參數 | 說明 | 樣本 |
集群类型 | 開源自建叢集所部署的網路環境。
| VPC专有网络集群 |
集群名称 | 開源自建叢集的自訂標識,僅用於區分和查看任務,不影響業務鏈路。 | first |
VPC | 開源自建叢集所部署的VPC ID。 僅集群类型為VPC专有网络集群時需要配置。 | vpc-bp1mhd******24chrxn |
交换机 | 該交換器資訊僅用於打通雲訊息佇列 RocketMQ 版遷移工具訪問開源自建叢集的網路通道,並不是指開源自建叢集在哪個交換器下部署。 填寫規則如下:
僅集群类型為VPC专有网络集群時需要配置。 | vsw-bp1hejs******0los38rn |
安全组 | 建議您選擇自建叢集所部署的ECS所屬的安全性群組,若不是,則您需要保證選擇的安全性群組的安全規則允許訪問目標雲訊息佇列 RocketMQ 版所在的節點。 僅集群类型為VPC专有网络集群時需要配置。 | sg-bp160q******vtcxvwl |
NameServer 地址 | 開源自建叢集的Name Server地址。 多個地址之間使用逗號(,)或分號(;)分隔。 重要 您需要配置所有待遷移自建叢集的Name Server資訊,如有遺漏,可能會導致後續進行遷移操作時選不到需要遷移的Topic。 | 192.168.XX.XX:9876 |
访问凭证 |
| ACL |
用户名 | 開源自建叢集的Admin帳號。 僅開源自建叢集開啟了ACL認證時需要配置。 | admin |
用户密码 | 開源自建叢集的Admin帳號的密碼。 僅開源自建叢集開啟了ACL認證時需要配置。 | ****** |
步驟三:遷移中繼資料
網路打通後,需要根據遷移範圍選取指定的Topic和Group,完成中繼資料遷移操作。
注意事項
遷移中繼資料時,雲訊息佇列 RocketMQ 版遷移工具會動態讀取源自建叢集的Topic和Group資訊並在列表中全部展示,只需要操作本次任務範圍內相關的Topic和Group即可。
該操作步驟無法回退,請確保本次任務範圍內的Topic和Group都遷移完成後再進入下一步,否則後續需要手動補充Topic。
操作步驟
在遷移上雲任務的元数据迁移設定精靈頁面,單擊Topic元数据頁簽。
在Topic列表中選中需要遷移的Topic,在消息类型下拉框中選擇對應的Topic的類型,然後在其操作列單擊确认并导入。
您也可以選擇多個Topic,直接單擊批量导入。
重要開源Apache RocketMQ 4.x版本沒有訊息類型的概念,阿里雲雲訊息佇列 RocketMQ 版會對Topic的訊息類型和Message的類型進行一致性校正,因此在中繼資料遷移時,您需要根據實際業務情境手動錄入Topic的訊息類型。
如果訊息類型選擇錯誤,會導致遷移後訊息收發失敗。如果您不確定Topic的訊息類型或存在Topic混用的情況,可以提交工單諮詢。
單擊Group元数据頁簽,在Group列表中選中需要遷移的Group,在消费顺序类型下拉框中選擇訊息消費的投遞順序,然後在其操作列單擊确认并导入。
您也可以選擇多個Group,直接單擊批量导入。
重要開源Apache RocketMQ 4.x系列SDK的訊息消費順序在用戶端中配置,阿里雲雲訊息佇列 RocketMQ 版5.x版本執行個體在服務端中控制Group的消費順序,因此在中繼資料遷移時,您需要根據實際業務情境手動錄入Group的消費順序類型。
如果消費順序的類型選擇錯誤,會導致遷移後訊息的消費順序出現異常。如果您不確定Group的消費順序,可以提交工單諮詢。
確認本次遷移任務內所有需要遷移的Topic和Group已經全部匯入後,單擊导入完成,进入下一步。
步驟四:更換存取點
Topic和Group中繼資料遷移完成後,開始進入線上業務遷移階段,您需要協調此次遷移涉及的生產者應用、消費者應用串連到目的地組群,即將生產者和消費者應用的存取點修改為雲訊息佇列 RocketMQ 版5.x執行個體的存取點。
注意事項
存取點更換後修改重啟生產者和消費者應用,此步驟雖然將訊息收發應用接入到目標雲訊息佇列 RocketMQ 版執行個體,但遷移工具後台仍將訊息收發的Topic路由串連至源自建叢集,因此訊息收發鏈路在該步驟不會產生變化和影響。各訊息收發應用間可自由安排切換順序。
請確保此次遷移涉及的所有生產者應用和消費者應用均已完成存取點更換,然後再進行下一步。
存取點修改樣本
Apache RocketMQ Remoting協議SDK,根據版本號碼進行如下配置:
變更前:
producer.setNamesrvAddr(“192.168.XX.XX:9876”); consumer.setNamesrvAddr(“192.168.XX.XX:9876”);變更後:
SDK版本號碼 >= 4.5.1
producer.setNamesrvAddr(“rmq-cn-pe334******-vpc.cn-hangzhou.rmq.aliyuncs.com:8080”); // vipChannelEnabled的預設值為false;若已將其設定為true,則需移除該配置。 // producer.setVipChannelEnabled(false); consumer.setNamesrvAddr(“rmq-cn-pe334******-vpc.cn-hangzhou.rmq.aliyuncs.com:8080”); // vipChannelEnabled的預設值為false;若已將其設定為true,則需移除該配置。 // consumer.setVipChannelEnabled(false);SDK版本號碼 < 4.5.1
producer.setNamesrvAddr(“rmq-cn-pe334******-vpc.cn-hangzhou.rmq.aliyuncs.com:8080”); // vipChannelEnabled的預設值為true,須將其設定為false。 producer.setVipChannelEnabled(false); consumer.setNamesrvAddr(“rmq-cn-pe334******-vpc.cn-hangzhou.rmq.aliyuncs.com:8080”); // vipChannelEnabled的預設值為true,須將其設定為false。 consumer.setVipChannelEnabled(false);
操作步驟
訊息收發應用存取點配置修改完成並重啟應用後,在遷移上雲任務的更换接入点設定精靈頁面單擊变更完成,进入下一步。
步驟五:遷移訊息業務
遷移訊息業務需要按照Topic粒度對每個Topic進行切流操作,將訊息讀寫流量分階段切換到目的地組群上。
注意事項
執行切流操作時,每切換一次Topic狀態,請及時觀察訊息收發是否符合預期,若無異常再執行下一步切換操作,若訊息收發出現異常可直接復原操作,待異常原因排查後繼續進行切流操作。
請確保此次遷移任務範圍內的Topic均完成切流操作,且切流後訊息收發平穩無異常再選擇完成遷移任務,遷移任務一旦完成則無法修改。
切流狀態說明
表 2. 切流階段狀態
切流狀態 | 狀態說明 | 流量拓撲 |
读写源集群 | 訊息遷移的起始狀態。
|
|
写源集群冗余读 |
|
|
写目标集群冗余读 |
此階段目的地組群會同時有訊息生產和訊息消費流量,請驗證新的訊息收發流程是否正常,並等待源叢集的訊息消費完成。 重要 在此階段,需要檢查源叢集的訊息消費是否已完成,並確認是否存在未出隊的定時訊息。如果所有訊息均已消費完成,則可以切換到读写目标集群狀態。 |
|
读写目标集群 | 確認新的訊息收發符合預期,且源叢集已無堆積訊息全部消費完成,可將Topic切換至該狀態,此時訊息讀寫流量只訪問目的地組群,遷移完成。
|
|
切流操作
在遷移上雲任務的消息迁移設定精靈頁面,在Topic列表中選擇待遷移訊息業務的Topic,確認其檢查狀態。
若檢查狀態為检查通过,則直接執行下一步驟。
若檢查狀態不是检查通过,請根據檢查結果排查異常,然後在其操作列單擊重新校验,直到檢查通過。然後繼續執行下一步驟。
各切流狀態所執行的檢查項,請參見檢查項說明。
若檢查狀態不是检查通过,且您確認檢查結果不會有實際影響,您可以直接在指定Topic的操作列單擊忽略检查,然後執行下一步驟。
在待切換Topic的操作列單擊确认切流。
在彈出的提示對話方塊中仔細閱讀提示資訊,然後單擊确定。
切流過程一共分為4個階段,您需要重複執行切流操作4次,直到該Topic的切流阶段變為读写目标集群。
各切流階段的Topic讀寫流量情況,請參見切流階段狀態。
確認本次遷移任務涉及的所有Topic均完成切流操作,然後單擊頁面下方的迁移完成。
相關操作說明
執行切流操作時,訊息遷移頁面的其他動作說明如下:
復原到上一個狀態:若遷移過程中出現非預期結果,可將指定Topic的切流狀態復原到上一個運行正常的狀態,待排查異常原因後再確定後續操作。
復原到初始狀態:該方式可直接將切流狀態強制復原到初始狀態,即還未開始切流的路由狀態,一般用於異常情況緊急止血。
說明該方式狀態變化跨度較大,之前遷移過程中產生的未消費訊息可能會造成延時或無法處理的情況。
补充创建
若中繼資料遷移時有遺漏的Topic未進行遷移,在切流任務中可補充建立對應的Topic,即在雲訊息佇列 RocketMQ 版5.x執行個體上手動建立一個和源叢集Topic名稱相同的Topic。
批量切流/批量回滚
批量執行切流或復原操作。
說明批量切流和批量復原僅支援操作切流阶段相同的Topic。
切流階段檢查項
表 3. 檢查項說明
切流階段 | 檢查項 |
切換到写源集群冗余读狀態 |
|
切換到写目标集群冗余读狀態 |
|
切換到读写目标集群狀態 |
|
步驟六:完成遷移任務
注意事項
在完成遷移任務前,確保自建開源RocketMQ叢集中定時訊息已全部完成消費。
完成遷移任務後,才能下線自建開源RocketMQ叢集。
操作步驟
在迁移上云頁面,選擇目標任務,在其操作列單擊詳情。
在遷移上雲詳情頁面,單擊迁移完成。



