錢大媽是社區生鮮連鎖品牌的開拓者,經過十一年的穩健運營,已成為行業內的領軍品牌,截至 2023 年 7 月已全國布局超 30 多座城市,門店總數 3000 余家,服務家庭超 1000 萬。近年來,隨著業務的高速發展以及門店的快速擴張,錢大媽需要對生鮮產品的采購、銷售、庫存等數據進行實時監控和分析,以保障食品的新鮮度及品質。同時需要管理眾多門店與供應鏈信息,以了解各區域銷售趨勢和顧客偏好,從而優化商品結構和庫存管理。
在此背景下,錢大媽基于 Apache Doris 搭建了實時數倉,為業務用戶提供實時精準的數據查詢及分析服務。自引入 Apache Doris 后,錢大媽的報表和 BI 分析能力有了質的飛躍,能夠輕松面對海量數據的處理,并實現秒級別的查詢響應。憑借 Apache Doris 強大的性能,錢大媽能夠實時監控生鮮產品的流通情況,為商品結構的優化和食品新鮮度的保障提供堅實的數據支撐。
讀寫分離需求背景
在當前的數據倉庫架構中,從 ODS 層 - DWD 層 - DWS 層 - ADS 層的數倉分層均在 Apache Doris 內部構建,采用微批調度機制實現數據分層加工處理。隨著業務的迅猛發展,需要存儲和應用的數據規模愈加龐大,帶來最明顯的變化是數據寫入規模與查詢頻次的急劇攀升,如果在執行調度任務的同時進行數據查詢,可能出現系統資源搶占問題。一旦資源出現緊缺,將導致寫入和查詢任務性能下降,甚至出現任務失敗或系統宕機,給集群穩定性帶來影響。
因此,錢大媽考慮通過讀寫分離策略來解決這一問題。 具體而言,就是將經過高度加工處理的 ADS 層數據同步至另一個 Doris 集群,專供用戶查詢使用。這樣不僅可以保證集群的穩定性,還能避免不規范的業務查詢對數據導入和加工產生干擾。而讀寫分離方案的實現,就需要依賴跨集群數據復制能力。
早期方案
在之前版本中,由于備份恢復的方式難以保證數據的實時性和強一致性,因此我們決定借助 Doris 的多源數據目錄 Multi-Catalog 來暫解燃眉之急。Multi-Catalog 核心能力旨在更便捷地對接外部多種數據源,提供跨源聯邦查詢的能力,盡管這并不是應對跨集群復制的最佳解決方案,但我們思考是否能巧借這一能力,間接實現集群間的復制。在這一思路指引下,我們通過編寫腳本,利用 Catalog 方式實現增量數據的拉取,同步流程如下圖所示:

我們在目的集群中建立了多個源集群數據表的 Catalog,通過定期執行調度任務將源表中的數據導入進目的集群中,由于每次導入時無法自動識別增量數據,因此增加了最近更新時間這一字段來進行標識。由于數據時效性的保證依賴于外部調度任務的執行,因此目的集群中的數據表存在較高的時延、難以滿足業務對數據實時性的需求。另一方面,每一張表的導入 SQL 都需要增加對最近更新時間的邏輯判斷,一旦缺少判斷則需要對整表進行刪除后重新導入,這無疑增加了開發難度和數據出錯率。
目標方案
為克服上述問題,錢大媽亟需尋找更為高效、便捷的解決方案,并期望新的方案可以滿足以下要求:
- 實時數據同步時延需低于 2 秒。
- 具備完善監控及告警機制,對數據同步任務進行實時監控。當數據同步出現問題時,將立即觸發告警,并通過企業微信、郵件等方式通知,以保障數據同步的穩定性。
- 完備的應急方案,當出現問題時可以在不影響查詢的情況下快速恢復(如隱式表)
- 數據同步支持分區替換的命令,如
ALTER TABLE tbl1 REPLACE PARTITION
在這期間,錢大媽也嘗試過其他解決方案,直到去年Apache Doris 在 2.0 版本中實現了跨集群復制(CCR)功能。在深入了解及調研后,決定選擇這款輕量級工具,相對于外部集成其優勢在于:
- 進程設計極其輕量級,數據同步任務進行時僅占用極少量的機器資源,能夠在不影響系統整體性能的前提下,高效穩定地運行。
- 操作非常簡單,用戶只需通過一條 POST 請求即可完成配置,大大降低了用戶的使用門檻,即使是非專業的技術人員也能快速上手。
- 數據遷移能力強,遷移能力的上限完全取決于Doris 集群的配置。用戶可以根據實際需求對集群進行靈活配置,以達到最佳的遷移效果。
- 支持 DDL 同步,源集群執行的 DDL 語句可以自動同步到目標集群,從而保證了數據的一致性。
- 較高靈活性,用戶也以根據需求靈活選擇全量或者增量同步,為數據同步的提供了較好的靈活性。
最新方案
跨集群數據復制(CCR )的操作非常簡單,只需在源集群和目標集群中開啟 Binlog 即可啟動進程,并將等待同步的庫名或者表名發送給 CRR ,它便能夠自動開始存量和增量數據的同步任務。流程圖如下所示:

當前錢大媽選取了多張表進行表級別的數據同步,單表每天約有 5000 萬的增量數據。經過一個月的試運行之后,同步任務表現穩定且性能優異,帶來包括數據穩定性、數據準確性、研發效率和導入性能的全方位提升:
1. 穩定性與準確性。 同步任務運行平穩,使用至今暫未出現任務失敗或數據無法同步的問題;數據準確性極大增強,確保了每一條數據都能準確無誤地保存和傳輸。基于 CCR 成功實現了集群的讀寫分離,將讀壓力有效地遷移至只讀集群,進一步提升了整個集群的穩定性。
2. 縮短同步流程,研發效率大幅提升。
-
在使用 CCR 之前:需要對每張表創建 SQL 以 Catalog 方式寫入;對于沒有
last_update_time的表,只能在目標集群刪表后再全量同步。Insert into catalog1.db.destination_table_1 select * from catalog1.db.source_table1 where time > xxx Insert into catalog1.db.destination_table_2 select * from catalog1.db.source_table2 where time > xxx … Insert into catalog1.db.destination_table_x select * from catalog1.db.source_table_x -
在使用 CCR 過后,整庫同步只需要一條
post請求,即可快速完成跨集群的數據同步:curl -X POST -H "Content-Type: application/json" -d '{ "name": "ccr_test", "src": { "host": "localhost", "port": "9030", "thrift_port": "9020", "user": "root", "password": "", "database": "demo", "table": "" }, "dest": { "host": "localhost", "port": "9030", "thrift_port": "9020", "user": "root", "password": "", "database": "ccrt", "table": "" } }' http://127.0.0.1:9190/create_ccr
3. 數據導入速率顯著提升。 對于一整天數據的同步,使用 Catalog 方式則需要 30+ 秒同步完成,而使用 CCR 僅需要 3-4 秒即可同步完成。對于實時數據的同步,如果使用 Catalog 方式則依賴手動更新或定期調度,而使用 CCR 同步可以在 1 秒左右完成,實現亞秒級數據同步。
結束語
Apache Doris 跨集群復制(CCR) 功能的引入,為錢大媽帶來了顯著的收益。這一功能使得數據同步變得更為便捷高效,不僅大幅提升了數據同步的效率,同時增強了 Doris 集群的計算穩定性,為讀寫分離提供了更適配的解決方案。
隨著 CCR 功能的不斷完善和優化,錢大媽也將逐步將 ADS 以外的其他分層數據納入同步范疇,實現更為廣泛的數據整合與共享。并將基于CCR 功能在異地災備、測試環境數據同步等場景進行應用,以提供更為安全可靠的使用體驗,確保業務的穩定連續運行。
在此也歡迎有相關需求的同學積極反饋需求或問題,也可以通過下方二維碼加入 CCR 專項支持群,我們將為您提供全面的技術支持和服務。



