主頁 > 軟體設計 > 實時資料同步服務(canal+kafka)的架構設計

實時資料同步服務(canal+kafka)的架構設計

2020-09-10 05:40:08 軟體設計

 

  1. 移山是禧云自研的資料遷移平臺,包含異構資料源的遷移、實時資料同步等服務,有興趣的可以看這里:了解在移山中怎么實作異構資料源的遷移

  2. 本文主要介紹移山實時資料同步服務產生的背景以及整體架構設計,

  3. 可以訪問 這里 查看更多關于大資料平臺建設的原創文章,

一. 移山實時資料同步服務產生背景

  • 禧云各個子公司業務系統基本都是以 MySQL 為主;

  • 做為資料支持部門,需要訂閱這些業務資料做為資料倉庫的資料源,來進行下游的資料分析,比如:

    • 各種離線資料 T+1 報表展示;

    • 實時資料大屏展示等,

微信小程式實時資料指標展示

像這種常見的實時資料指標大屏展示,背后可能就用到實時資料同步服務技術堆疊,

二. 移山實時資料同步服務使用canal中間件

1. 使用場景符合

它可以對 MySQL 資料庫增量日志決議,提供增量資料訂閱和消費,完全符合我們的使用場景,

2. 支持將訂閱到的資料投遞到kafka

canal 1.1.1版本之后,server端可以通過簡單的配置就能將訂閱到的資料投遞到MQ中,目前支持的MQ有kafka、RocketMQ,替代老版本中必須通過手動編碼投遞的方式,

移山的實時資料同步服務使用的MQ為kafka,以下為主要配置:

修改canal.properties中配置
# 這里寫上當前canal server所在機器的ip
canal.ip = 10.200.*.109
# register ip to zookeeper(這里寫上當前canal server所在機器的ip)
canal.register.ip = 10.200.*.109
# 指定注冊的zk集群地址
canal.zkServers =10.200.*.109:2181,10.200.*.110:2181
 
# tcp, kafka, RocketMQ(設定serverMode模式,這個配置非常關鍵,我們設定為kafka)
canal.serverMode = kafka
 
# 這個demo就是conf目錄里的實體
canal.destinations = demo
# HA模式必須使用該xml,需要將相關資料寫入zookeeper,保證資料集群共享
canal.instance.global.spring.xml = classpath:spring/default-instance.xml
 
# 這里設定 kafka集群地址(其它關于mq的配置引數可以根據實際情況設定)
canal.mq.servers = 10.200.*.108:9092,10.200.*.111:9092
修改demo.properties中配置
# canal偽裝的MySQL slave的編號,不能與MySQL資料庫和其他的slave重復
# canal.instance.MySQL.slaveId=1003
# 按需修改成自己的資料庫資訊
# position info(需要訂閱的MySQL資料庫地址)
canal.instance.master.address=10.200.*.109:3306
 
# 這里配置要訂閱的資料庫,資料庫的用戶名和密碼
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.defaultDatabaseName =
 
# 設定要訂閱的topic名稱
canal.mq.topic=demo
 
# 設定訂閱散列模式的磁區數
canal.mq.partitionsNum=3

 

備注

  • 更多關于mq的配置引數解釋,可以訪問這里:https://github.com/alibaba/canal/wiki/Canal-Kafka-RocketMQ-QuickStart

  • 多個 canal server 除了 ip 和 MySQL.slaveId 設定不同外,其它都應該保持相同的配置,

3.支持帶cluster模式的客戶端鏈接,保障服務高可用

  • 客戶端可以直接指定zookeeper地址、instance name,canal client 會自動從zookeeper中的running節點,獲取當前canal server服務的作業節點,然后與其建立鏈接;

  • 其它canal server節點則做為Standby狀態,如果當前active節點發生故障,可以自動完成failover切換,

對canal 的高可用(HA機制)想了解更多,可以查看這篇文章,

三. 移山實時資料同步流程圖

實時資料同步服務流程圖(摘自《禧云數芯大資料平臺技術白皮書》)如下:

總結

  • canal server 訂閱業務系統的 MySQL 資料庫產生的 bin log;

  • canal server 將訂閱到的 bin log 投遞至 kafka 指定的topic里;

  • kafka 消費端拿到訊息,根據實際的資料使用場景,將資料再寫入 Hbase 或 MySQL,或直接做實時分析,

四. 創建一個實時資料同步任務的主要步驟

以創建一個資料訂閱型別為 HBase 的資料同步任務為例,主要步驟如下:

  1. 創建kafka的topic;

  2. 進入到canal server的bin目錄,拷貝example整個目錄,生成一個新的實體目錄;

  3. 手動修改新實體的組態檔,配置以下主要引數:

    • 3.1 設定slaveId,不能與已經成功運行的實體設定的slaveId值重復;

    • 3.2 要訂閱的資料庫所在的機器地址和埠號;

    • 3.3 要訂閱的資料庫名稱;

    • 3.4 要訂閱的表;

    • 3.5 要訂閱的資料庫用戶名、密碼;

    • 3.6 配置向kafka發送訊息的topic;

    • 3.7 配置kafka的partition等;

  4. 重啟canal server;

  5. 查看實體的啟動日志,判斷實體是否啟動成功,

存在的問題

由于缺乏 WebUI 的支撐,因此會存在以下問題:

  • 流程復雜:如上這些一系列的操作都是依靠腳本的方式配置完成,配置程序繁瑣,資料開發者很容易在某個環節上發生遺漏、出錯;

  • 不利于任務的統一管理:比如誰開發的任務可能只有寫代碼的這個人比較熟悉;

  • 不方便查看任務的運行情況:比如已消費訊息數、延遲訊息數;

  • 不利于排查問題:查看任務的執行情況只能登陸 canal server 所在服務器去查看任務所屬實體的啟動日志,如果遇到錯誤時,不能夠快速及時的排查問題,

怎么解決問題

為了解決上面提到的這些問題,我們開發了移山的實時資料同步服務,

后話

  • 在最新的穩定版:canal 1.1.4版本,迎來最重要的 WebUI 能力;

  • instance 可以通過 WebUI 來創建,但是有部分使用者反饋,instance的啟動會有不穩定的情況出現,我們期待穩定版本可以快速發布,

五. 移山實時資料同步服務整體架構

1. 所需集群環境

zookeeper集群

為什么要用zookeeper集群,可以看這篇文章:阿里canal是怎么通過zookeeper實作HA機制的?

kafka集群
  • kafka 具有高吞吐量、內置的磁區、備份冗余分布式等特點,為大規模訊息處理提供了一種很好的解決方案;

  • 前面已經提到過 canal 中間件通過簡單的配置即可支持將訂閱到的資料直接投遞到 kafka中,

canal server集群

為保障資料訂閱服務的穩定性,我們需要借助 canal 的HA機制,實作故障自動轉移,保障服務高可用,因此我們需要部署多個 canal server,

hbase集群
  • 資料湖在禧云的實踐是存盤集團各子公司、ISV各種各樣原始資料的大型倉庫,其中的資料可供存取、處理、分析和傳輸;

  • 資料湖的技術解決方案,我們選擇的是 Apache HBase,

2. 移山實時資料同步架構設計

架構圖

canal server端
  • 在canal server 的多個節點上手工創建、運行instance;

備注:

  • 我們在配置instance相關引數時,不指定具體的資料庫,這樣該instance可以訂閱到該MySQL節點上的所有資料庫,然后在移山創建同步任務時再指定具體要訂閱的表,

移山

前端采用 Vue.js + Element UI,后端使用 SpringBoot 開發:

  • 前端工程

    • 負責提供創建實時同步任務所需的 WebUI;

    • 提供豐富的任務運行監控功能,

  • 后端工程

    • 負責前端工程的資料介面,會記錄目標表(實時同步任務訂閱到的資料最終存盤的目的地)的各種元資料資訊,

備注:

  • 如果要創建的同步任務將資料存盤至MySQL,則需要提前人工干預創建MySQL表(MySQL資料庫由DBA統一管理);

  • 如果要創建的同步任務將資料存盤至Hbase,則在移山創建任務時,由后臺自動創建Hbase表,

變形金剛

處理訂閱資料存盤的java工程,分為三個可單獨部署的模塊:

  • canal client服務

    • canal 客戶端,從 canal server 拿到資料,并將資料投遞至kafka,

  • kafkaToHbase服務

    • kafka 消費端,負責將接收的訊息進行轉化處理,處理后的資料存盤至Hbase,

  • kafkaToMySQL服務

    • kafka 消費端,負責將接收的訊息進行轉化處理,處理后的資料存盤至MySQL,

備注:

  • 以上三個服務均支持命令列啟動、停止,

關注微信公眾號

歡迎大家關注我的微信公眾號閱讀更多文章:

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/1026.html

標籤:架構設計

上一篇:實時資料同步服務(canal+kafka)是如何保證訊息的順序性?

下一篇:qt 實作MVC Api控制器開發 web api介面-連載【5】-企業級系統開發實戰連載系列 -技術堆疊(vue、element-ui、qt、c++、sqlite)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more