MySQL數據實時同步到Hive的架構


       在數據倉庫建模中,未經任何加工處理的原始業務層數據,我們稱之為ODS(Operational Data Store)數據。在互聯網企業中,常見的ODS數據有業務日志數據(Log)和業務DB數據(DB)兩類。對於業務DB數據來說,從MySQL等關系型數據庫的業務數據進行采集,然后導入到Hive中,是進行數據倉庫生產的重要環節。

如何准確、高效地把MySQL數據同步到Hive中?一般常用的解決方案是批量取數並Load:直連MySQL去Select表中的數據,然后存到本地文件作為中間存儲,最后把文件Load到Hive表中。這種方案的優點是實現簡單,但是隨着業務的發展,缺點也逐漸暴露出來:

  • 性能瓶頸:隨着業務規模的增長,Select From MySQL -> Save to Localfile -> Load to Hive這種數據流花費的時間越來越長,無法滿足下游數倉生產的時間要求。

  • 直接從MySQL中Select大量數據,對MySQL的影響非常大,容易造成慢查詢,影響業務線上的正常服務。

  • 由於Hive本身的語法不支持更新、刪除等SQL原語,對於MySQL中發生Update/Delete的數據無法很好地進行支持。

為了徹底解決這些問題,我們逐步轉向CDC(Change Data Capture)+ Merge的技術方案,即實時Binlog采集 + 離線處理Binlog還原業務數據這樣一套解決方案。Binlog是MySQL的二進制日志,記錄了MySQL中發生的所有數據變更,MySQL集群自身的主從同步就是基於Binlog做的。

本文主要從Binlog實時采集和離線處理Binlog還原業務數據兩個方面,來介紹如何實現DB數據准確、高效地進入數倉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM