[toc]html
採集工具的侷限性 當前有不少數據採集工具,他們或多或少都存在一些侷限性:
上面這些採集工具還以一個共性問題是缺少統一的數據源端管控,因此也就沒法找到統一的數據入口, 那後續處理元數據或者血緣分析會異常困難。
數據同步方法侷限性 同時過去一般的同步數據的方法有不少種,好比: 各個數據使用方在業務低峯期各類抽取所需數據(缺點是存在重複抽取並且數據不一致) 由統一的數倉平臺經過sqoop到各個系統中抽取數據(缺點是sqoop抽取方法時效性差,通常都是 T+1的時效性) 基於trigger或時間戳的方式得到增量的變動(缺點是對業務方侵入性大,帶來性能損失等) 這些方案都不能算完美,要想同時解決數據一致性和實時性,比較合理的方法應該是基於日誌的解決方 案,同時可以提供消息訂閱的方式給下游系統使用。在這個背景下DBus就誕生了。
專一於數據的收集及實時數據流計算,經過簡單靈活的配置,以無侵入的方式對源端數據進行採集,採用高可用的流式計算框架,對公司各個IT系統在業務流程中產生的數據進行匯聚,通過轉換處理後成爲統一JSON的數據格式(UMS),提供給不一樣數據使用方訂閱和消費,充當數倉平臺、大數據分析平臺、實時報表和實時營銷等業務的數據源。支持多租戶管理,提供租戶級資源、數據隔離機制。
DBUS主要分爲兩個部分:貼源數據採集和多租戶數據分發。兩個部分之間以Kafka爲媒介進行銜接。無多租戶資源、數據隔離需求的用戶,能夠直接消費源端數據採集這一級輸出到kafka的數據,無需再配置多租戶數據分發。
DBUS源端數據採集大致來講分爲兩部分: 讀取RDBMS增量日誌的方式來 實時獲取增量數據日誌,並支持全量拉取; 基於logtash,flume,filebeat等抓取工具來實時得到數據,以可視化的方式對數據進行結構化輸出; 如下爲具體實現原理
主要模塊以下: 日誌抓取模塊:從RDBMS的備庫中讀取增量日誌,並實時同步到kafka中; 增量轉換模塊:將增量數據實時轉換爲UMS數據,處理schema變動,脫敏等; 全量抽取程序:將全量數據從RDBMS備庫拉取並轉換爲UMS數據; 日誌算子處理模塊:未來自不一樣抓取端的日誌數據按照算子規則進行結構化處理; 心跳監控模塊:對於RDMS類源,定時向源端發送心跳數據,並在末端進行監控,發送預警通知;對於日誌類,直接在末端監控預警。 web管理模塊:管理全部相關模塊。
對於不一樣租戶對不一樣源端數據有不一樣訪問權限、脫敏需求的情形,須要引入Router分發模塊,將源端貼源數據,根據配置好的權限、用戶有權獲取的源端表、不一樣脫敏規則等,分發到分配給租戶的Topic。這一級的引入,在DBUS管理系統中,涉及到用戶管理、Sink管理、資源分配、脫敏配置等。不一樣項目消費分配給他的topic。
無侵入方式接入多種數據源: 業務系統無需任何修改,以無侵入性讀取數據庫系統的日誌得到增量數據實時變化。目前RDBMS支持mysql,oracle數據源(Oracle數據源請參考Oracle相關協議), 日誌方面支持基於logstash,flume和filebeat的多種數據日誌抽取方案。 海量數據實時傳輸: 使用基於Storm的流式計算框架,秒級延時,總體無單點保證高可用性。 多租戶支持: 提供用戶管理、資源分配、Topology管理、租戶表管理等豐富的功能,可根據需求,爲不一樣租戶分配不一樣的源端表數據訪問權限,應用不一樣的脫敏規則,從而實現多租戶資源隔離、差別化數據安全。 詳細參考: https://bridata.github.io/DBus/index.html 文檔參考: https://github.com/BriData/DBus/blob/master/docs/quick-start.md
DBus安裝部署分爲如下兩種方式(注意:兩種方式不能夠混用): All In One體驗版 該版本安裝在單機上,自動部署安裝dbus所依賴的相關組件,僅用於體驗dbus基本功能, 不能夠用於生產。 該版本支持mysql數據源接入體驗。 集羣部署 用於生產環境或測試環境部署。 可部署在單機上或集羣上。 包含對Oracle、mysql,logstash、filebeat、flume等數據源的支持。
系統: CentOS7.9x64 hostname Dbus-ns1 下載軟件: https://github.com/BriData/DBus/releases 說明all in one是一個單機版本dbus環境,是給用戶快速體驗dbus的功能,只是一個簡單體驗版,不能 用於其它環境或者用途,具體包括以下: 基礎組件: zookeeper 3.4.6 kafka 0.10.0.0 storm 1.0.1 granfana 4.2.0 logstash 5.6.1 influxdb mysql --------------------------- dbus相關包: dbus-keeper 0.5.0 dbus-stream-main 0.5.0 dbus-keeper 0.5.0 dbus-stream-main 0.5.0 dbus-router 0.5.0 dbus-heartbeat 0.5.0 dbus-log-processor 0.5.0 -------------------------- mysql數據源所需軟件: canal
Canal 對 MySQL的需求版本5.7 以上: ----------------------- 安裝MySQL5.7 yum yum -y localinstall https://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 安裝MySQL: yum -y install mysql-community-server systemctl enable mysqld systemctl start mysqld systemctl status mysqld grep 'temporary password' /var/log/mysqld.log
set global validate_password_policy=0; set global validate_password_mixed_case_count=0; set global validate_password_number_count=3; set global validate_password_special_char_count=0; set global validate_password_length=3; ALTER USER 'root'@'localhost' IDENTIFIED BY 'root%123'; exit
sudo vi /etc/my.cnf [mysqld] # dbus相關配置開始 log-bin=mysql-bin binlog-format=ROW server_id=1 # dbus相關配置結束 而後重啓MySQL: sudo systemctl restart mysqld
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.1.0.x86_64.rpm sudo yum -y localinstall influxdb-1.1.0.x86_64.rpm sudo systemctl start influxdb sudo systemctl status influxdb sudo systemctl enable influxdb
初始化 influx #執行初始化腳本 create database dbus_stat_db use dbus_stat_db CREATE USER "dbus" WITH PASSWORD 'dbus!@#123' ALTER RETENTION POLICY autogen ON dbus_stat_db DURATION 15d exit
# 若是沒有app目錄,要先建立app目錄 mkdir -p /app/ mv dbus-allinone.tar.gz /app/ tar -zxvf dbus-allinone.tar.gz
導入MySQL數據 執行如下命令進行數據庫初始化,會建立dbmgr庫以及用戶、canal用戶、dbus庫以及用戶、testschema庫以及用戶: MySQL: mysql -uroot -proot%123 source /app/dbus-allinone/sql/init.sql;
cd /app/dbus-allinone/ ./start.sh
進入目錄/app/dbus-allinone/allinone-auto-check-0.5.0,執行自動檢測腳本auto-check.sh, ./auto-check.sh
會在目錄/app/dbus-allinone/allinone-auto-check-0.5.0/reports下生產對應時間的檢查報告,以下所示:
驗證MySQL數據是否能增量採集很簡單,先打開grafana監控,而後在MySQL裏插入數據,看監控是否顯示DBus已經採集到。 驗證機配置hosts 文件 咱們在Windows上遠程登陸Grafana, 修改C:\Windows\System32\drivers\etc\hosts文件設置相應的域名信息以下: 替換成部署allinone包的服務器ip地址 192.168.100.11 dbus-n1
登陸grafana 登陸grafana url地址: http://dbus-n1:3000/login 默認 用戶 admin/admin
mysql插入數據驗證 #登陸測試用戶 mysql -utestschema -p #testschema帳戶密碼:j0<C6cqcqr:TestSchema #執行測試腳本 use testschema; INSERT INTO test_table (NAME, BIRTHDAY) VALUES ('testdataname', '2018-08-10 18:00:00'); INSERT INTO test_table (NAME, BIRTHDAY) VALUES ('testdataname', '2018-08-10 18:00:00'); INSERT INTO test_table (NAME, BIRTHDAY) VALUES ('testdataname', '2018-08-10 18:00:00'); INSERT INTO test_table (NAME, BIRTHDAY) VALUES ('testdataname', '2018-08-10 18:00:00'); INSERT INTO test table (NAME, BIRTHDAY) VALUES ('testdataname', '2018-08-10 18:00:00');
驗證日誌數據採集 dbus-heartbeat心跳模塊兒產生日誌位置在:/app/dbus-allinone/dbus-heartbeat- 0.5.0/logs/heartbeat/heartbeat.log,利用logstash抽取該日誌文件,把非結構化的數據,提取成結構化的數據 咱們能夠看他他按期會產生日誌: cd /app/dbus-allinone/dbus-heartbeat-0.5.0/logs/heartbeat/ tail -f heartbeat.log
http://dbus-n1:6090/login admin/12345678
用戶體驗版本: 體驗租戶功能,請使用用戶:user@dbus.com 密碼:12345678租戶界面以下: