canal使用rocketmq做數(shù)據(jù)同步的問題
因?yàn)橐WC數(shù)據(jù)的順序早芭,所以要使用rocketmq的順序topic署隘,保證在發(fā)送和消費(fèi)端都是用rocketmq順序topic的對(duì)應(yīng)api來保證順序
- canal.mq.partitionsNum設(shè)置同步數(shù)據(jù)的隊(duì)列數(shù)宋欺,一旦設(shè)置就不能更改胸墙,此時(shí)rocketmq后端broker如果有增減機(jī)器寸痢,會(huì)造成隊(duì)列數(shù)變化囊榜,canal就會(huì)報(bào)錯(cuò)
- 這個(gè)問題的本質(zhì)是canal如果要穩(wěn)定保證順序的話一定要依賴一個(gè)隊(duì)列數(shù)不變的順序topic,否則在隊(duì)列數(shù)變化的瞬間會(huì)有些數(shù)據(jù)無法保證順序
- 所以要避免這個(gè)問題尼变,可以保證rocketmq的隊(duì)列數(shù)不變利凑,使用自建rocketmq集群還好,如果使用云rocketmq是無法保證隊(duì)列數(shù)不變的嫌术。而且隊(duì)列數(shù)不變也意味著rocketmq集群無法擴(kuò)縮容
- 還有一種方式就是canal中不要指定隊(duì)列數(shù)哀澈,通過rocketmq提供的api自動(dòng)感知topic的隊(duì)列數(shù),并且明確告訴用戶當(dāng)隊(duì)列數(shù)有變化的瞬間無法保證數(shù)據(jù)順序