宜信數據采集平台DBus概述
作者:尹正傑
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
一.DBus產生背景
1>.采集工具的局限性
當前有很多數據采集工具,他們或多或少都存在一些局限性: Sqoop: 優點: RDBMS和Hadoop之間實現離線數據同步數據,其背后的工作本質依舊是MapReduce。 缺點: 僅限於離線和RDBMS和Hadoop之間的數據傳輸。 DataX: 優點: 阿里出品的Sqoop加強版工具,GitHub地址:https://github.com/alibaba/DataX 缺點: 長於主流的RDBMS數據庫、NOSQL、大數據計算系統。 Flume: 優點: 專注於日志實時采集。 缺點: 長於日志采集,其他方面相對弱一些。 Logstash: 優點: 專注於日志采集,實時,ELK體系。 缺點: 長於日志采集,其他方面相對弱一些 Filebeat: 優點: 更輕量級的日志收集工具,替代Logstash日志采集。 缺點: 長於日志采集,其他方面相對弱一些。 上面這些采集工具還有一個共性問題是缺乏統一的數據源端管控,所以也就無法找到統一的數據入口,那后續處理元數據或者血緣分析會異常困難。
2>.數據同步方法局限性
同時過去通常的同步數據的方法有很多種,比如: (1)各個數據使用方在業務低峰期各種抽取所需數據(缺點是存在重復抽取而且數據不一致) (2)由統一的數倉平台通過sqoop到各個系統中抽取數據(缺點是sqoop抽取方法時效性差,一般都是T+1的時效性) (3)基於trigger或時間戳的方式獲得增量的變更(缺點是對業務方侵入性大,帶來性能損失等)
上述方案都不能算完美,要想同時解決數據一致性和實時性,比較合理的方法應該是基於日志的解決方案,同時能夠提供消息訂閱的方式給下游系統使用。在這個背景下DBus就誕生了。DBUS是中國宜信公司研發的。
二.什么是DBus
DBus(數據總線)項目是為了統一數據采集需求而生,專注於數據的收集及實時數據流計算。 DBus通過簡單靈活的配置,以無侵入的方式對源端數據進行采集,采用高可用的流式計算框架,對公司各個IT系統在業務流程中產生的數據進行匯聚。 DBus經過轉換處理后成為統一JSON的數據格式(UMS),提供給不同數據使用方訂閱和消費,充當數倉平台,大數據分析平台,實時報表和實時營銷等業務的數據源。 DBus支持多租戶管理,提供租戶級資源,數據隔離機制。 DBus的主要應用場景: (1)數倉平台和數據分析平台 (2)實時營銷決策 (3)實時報表展示 (4)異構數據實時同步 (5)其他實時性要求高的系統 DBus的主要功能: 無侵入方式接入多種數據源: 業務系統無需任何修改,以無侵入性讀取數據庫系統的日志獲得增量數據實時變化。目前RDBMS支持mysql,oracle數據源(Oracle數據源請參考Oracle相關協議), 日志方面支持基於logstash,flume和filebeat的多種數據日志抽取方案。 海量數據實時傳輸: 使用基於Storm的流式計算框架,秒級延時,整體無單點保證高可用性。 多租戶支持: 提供用戶管理、資源分配、Topology管理、租戶表管理等豐富的功能,可根據需求,為不同租戶分配不同的源端表數據訪問權限,應用不同的脫敏規則,從而實現多租戶資源隔離、差異化數據安全。 感知源端schema變更: 當源端發生schema變更時,能自動感知schema變化,調整UMS版本號,並通過Kafka消息和郵件通知下游。 數據實時脫敏: 可根據需求對指定列數據進行實時脫敏。脫敏策略包括:直接替換、MD5、murmur等脫敏算法,脫敏加鹽,正則表達式替換等。支持用戶開發jar包實現DBUS未覆蓋的個性化脫敏策略。 初始化加載: 支持高效的初始化加載和重新加載,支持任意指定輸出topic,靈活應對客戶需求。 統一標准化消息傳輸協議: 使用統一的UMS(JSON格式)消息schema格式輸出便於消費,提供數據線級ums_id保證數據順序性,輸出insert,Update(before/after),Delete event數據。 可靠多路消息訂閱分發: 使用Kafka存儲和傳遞消息保證可靠性和便捷的多用戶訂閱 支持分區表/系列表數據匯集: 支持分區表的數據匯集到一個“邏輯表” 。也可將用戶自定義的系列表數據匯集到一個“邏輯表“。 實時監控&預警: 可視化監控系統能隨時查看各數據線實時流量和延時狀況;當數據線發生異常時,根據配置策略自動發郵件或短信通知相關負責人。 DBus官網地址: https://github.com/BriData/DBus
三.DBus架構和工作原理
DBUS主要分為兩個部分,即貼源數據采集和多租戶數據分發。如下圖所示,DBUS兩個部分之間以Kafka為媒介進行銜接。無多租戶資源、數據隔離需求的用戶,可以直接消費源端數據采集這一級輸出到kafka的數據,無需再配置多租戶數據分發。
1>.DBUS源端數據采集
DBUS源端數據采集大體來說分為2部分:
讀取RDBMS增量日志的方式來 實時獲取增量數據日志,並支持全量拉取;
基於logtash,flume,filebeat等抓取工具來實時獲得數據,以可視化的方式對數據進行結構化輸出;
如下圖所示,為DBUS具體實現原理,主要模塊如下:
日志抓取模塊:
從RDBMS的備庫中讀取增量日志,並實時同步到kafka中;
增量轉換模塊:
將增量數據實時轉換為UMS數據,處理schema變更,脫敏等;
全量抽取程序:
將全量數據從RDBMS備庫拉取並轉換為UMS數據;
日志算子處理模塊:
將來自不同抓取端的日志數據按照算子規則進行結構化處理;
心跳監控模塊:
對於RDMS類源,定時向源端發送心跳數據,並在末端進行監控,發送預警通知;對於日志類,直接在末端監控預警。
web管理模塊:
管理所有相關模塊。
2>.多租戶數據分發
對於不同租戶對不同源端數據有不同訪問權限、脫敏需求的情形,需要引入Router分發模塊,將源端貼源數據,根據配置好的權限、用戶有權獲取的源端表、不同脫敏規則等,分發到分配給租戶的Topic。
這一級的引入,在DBUS管理系統中,涉及到用戶管理、Sink管理、資源分配、脫敏配置等。不同項目消費分配給他的topic。
3>.DBus架構詳解
博主推薦閱讀: https://bridata.github.io/DBus/more-system-architecture.html