DBus数据总线(一):DBus all one 部署

标签(空格分隔): DBus系列
数据

[toc]


一:DBus概述

1.1: 产生背景

采集工具的局限性
当前有很多数据采集工具,他们或多或少都存在一些局限性:

image_1erqu10o3v98dl6e38mj1a955h.png-89.9kB

上面这些采集工具还以一个共性问题是缺乏统一的数据源端管控,所以也就无法找到统一的数据入口,
那后续处理元数据或者血缘分析会异常困难。
数据同步方法局限性
同时过去通常的同步数据的方法有很多种,比如:
各个数据使用方在业务低峰期各种抽取所需数据(缺点是存在重复抽取而且数据不一致)
由统一的数仓平台通过sqoop到各个系统中抽取数据(缺点是sqoop抽取方法时效性差,一般都是
T+1的时效性)
基于trigger或时间戳的方式获得增量的变更(缺点是对业务方侵入性大,带来性能损失等)
这些方案都不能算完美,要想同时解决数据一致性和实时性,比较合理的方法应该是基于日志的解决方
案,同时能够提供消息订阅的方式给下游系统使用。在这个背景下DBus就诞生了。

二:DBus 数据总线

2.1 DBus 数据总线的介绍

专注于数据的收集及实时数据流计算,通过简单灵活的配置,以无侵入的方式对源端数据进行采集,采用高可用的流式计算框架,对公司各个IT系统在业务流程中产生的数据进行汇聚,经过转换处理后成为统一JSON的数据格式(UMS),提供给不同数据使用方订阅和消费,充当数仓平台、大数据分析平台、实时报表和实时营销等业务的数据源。支持多租户管理,提供租户级资源、数据隔离机制。

2.2 DBus系统架构和工作原理

DBUS主要分为两个部分:貼源数据采集和多租户数据分发。两个部分之间以Kafka为媒介进行衔接。无多租户资源、数据隔离需求的用户,可以直接消费源端数据采集这一级输出到kafka的数据,无需再配置多租户数据分发。

image_1ep5ulupp1irs1ba91qe639evgl9.png-578.2kB

2.3 DBUS源端数据采集

DBUS源端数据采集大体来说分为两部分:

读取RDBMS增量日志的方式来 实时获取增量数据日志,并支持全量拉取;
基于logtash,flume,filebeat等抓取工具来实时获得数据,以可视化的方式对数据进行结构化输出;
以下为具体实现原理

image_1ep5unpot9721clf1se41sedv86m.png-772.8kB

主要模块如下:

日志抓取模块:从RDBMS的备库中读取增量日志,并实时同步到kafka中;
增量转换模块:将增量数据实时转换为UMS数据,处理schema变更,脱敏等;
全量抽取程序:将全量数据从RDBMS备库拉取并转换为UMS数据;
日志算子处理模块:将来自不同抓取端的日志数据按照算子规则进行结构化处理;
心跳监控模块:对于RDMS类源,定时向源端发送心跳数据,并在末端进行监控,发送预警通知;对于日志类,直接在末端监控预警。
web管理模块:管理所有相关模块。

2.4多租户数据分发

对于不同租户对不同源端数据有不同访问权限、脱敏需求的情形,需要引入Router分发模块,将源端貼源数据,根据配置好的权限、用户有权获取的源端表、不同脱敏规则等,分发到分配给租户的Topic。这一级的引入,在DBUS管理系统中,涉及到用户管理、Sink管理、资源分配、脱敏配置等。不同项目消费分配给他的topic。

image_1ep5uqhsf11hk33t1c52d8b1vah13.png-422.3kB


2.5 主要功能

无侵入方式接入多种数据源: 业务系统无需任何修改,以无侵入性读取数据库系统的日志获得增量数据实时变化。目前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

image_1ep5usqlshqh1la7q4e1utg1a6g1g.png-377kB

image_1ep5utbk01tnhmah49c10brici1t.png-390kB


三:Dbus 部署

3.1 Dbus部署

DBus安装部署分为以下两种方式(注意:两种方式不可以混用):
All In One体验版
该版本安装在单机上,自动部署安装dbus所依赖的相关组件,仅用于体验dbus基本功能,
不可以用于生产。
该版本支持mysql数据源接入体验。
集群部署
用于生产环境或测试环境部署。
可部署在单机上或集群上。
包含对Oracle、mysql,logstash、filebeat、flume等数据源的支持。

3.2 dbus all in one 部署

3.2.1 软件准备系统:

系统:
  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

3.2.3 安装MySQL

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

image_1ep6177521e4k1ltm1rb81t3l14042n.png-189.3kB

image_1ep616j34jh01bn9ega1n3a1vg2a.png-142.7kB



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

image_1ep61e55u1n0dhfm141uf329p34.png-95.5kB

image_1eq22tuhb1vn7uk1oppecb1uhs9.png-118.2kB

sudo vi /etc/my.cnf
[mysqld]
# dbus相关配置开始
log-bin=mysql-bin
binlog-format=ROW
server_id=1
# dbus相关配置结束

然后重启MySQL:

sudo systemctl restart mysqld

image_1ep61h4av91btfe455pao18334b.png-47kB

3.2.4:配置influxdb

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

image_1ep61lam51bpq19st8tbgsnnlh4o.png-219.7kB

image_1ep61ltk0l9g1f1kt1l184c1akd55.png-283.9kB

初始化 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

image_1ep61q7f6pbnj111m0nvq11br05i.png-97.9kB

3.2.5 配置 allinone dbus

# 如果没有app目录,要先创建app目录
mkdir -p /app/
mv dbus-allinone.tar.gz /app/
tar -zxvf dbus-allinone.tar.gz

image_1ep627idecb6111h11oio471jsp5v.png-40.8kB

导入MySQL数据
执行以下命令进行数据库初始化,会创建dbmgr库以及用户、canal用户、dbus库以及用户、testschema库以及用户:
MySQL: 
  mysql -uroot -proot%123

  source /app/dbus-allinone/sql/init.sql;

image_1ep62br4e1sb91ubuc7se7c2n26c.png-149.6kB

3.2.6 启动DBus

cd /app/dbus-allinone/
./start.sh

image_1ep83e3bu8cl1e6l1u9g1av6iuf9.png-130.5kB

3.2.7 生成启动报告

进入目录/app/dbus-allinone/allinone-auto-check-0.5.0,执行自动检测脚本auto-check.sh,

./auto-check.sh

image_1erqr8p7i26ppav1kde3olslm9.png-198.3kB

会在目录/app/dbus-allinone/allinone-auto-check-0.5.0/reports下生产对应时间的检查报告,如下所示:

image_1erqrad9br66df24891llh1alsm.png-155.1kB

3.2.8 导入数据测试

验证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

image_1erqrhfko2tvng4107i1t2610vq1g.png-254.7kB

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');

image_1erqrg2ab15aq1sfj1lvd7mksjv13.png-322.7kB


验证日志数据采集

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 

image_1erqrs8ojqf91aunvjkthn931t.png-289.3kB

3.2.8 打开web

http://dbus-n1:6090/login

admin/12345678

image_1erqrvckq1j3v19ij1a2p83eccl2a.png-2128.4kB

image_1erqs01p0j5c5971lep11bs1h4a2n.png-253.8kB

用户体验版本:
      体验租户功能,请使用用户:user@dbus.com 密码:12345678租户界面如下:

image_1erqs1sqhqcplveftv1di31d2i34.png-2283.9kB

image_1erqs45dr6rp1u9i3bo1ngu1ro53h.png-159.7kB

image_1erqu79ba1rb01b9c1u531ngrn3f5u.png-238.2kB