[关闭]
@zhangyy 2021-01-12T17:20:05.000000Z 字数 5065 阅读 253

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

DBus系列

数据


一:DBus概述

1.1: 产生背景

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

image_1erqu10o3v98dl6e38mj1a955h.png-89.9kB

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

二:DBus 数据总线

2.1 DBus 数据总线的介绍

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

2.2 DBus系统架构和工作原理

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

image_1ep5ulupp1irs1ba91qe639evgl9.png-578.2kB

2.3 DBUS源端数据采集

  1. DBUS源端数据采集大体来说分为两部分:
  2. 读取RDBMS增量日志的方式来 实时获取增量数据日志,并支持全量拉取;
  3. 基于logtashflumefilebeat等抓取工具来实时获得数据,以可视化的方式对数据进行结构化输出;
  4. 以下为具体实现原理

image_1ep5unpot9721clf1se41sedv86m.png-772.8kB

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

2.4多租户数据分发

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

image_1ep5uqhsf11hk33t1c52d8b1vah13.png-422.3kB


2.5 主要功能

  1. 无侵入方式接入多种数据源: 业务系统无需任何修改,以无侵入性读取数据库系统的日志获得增量数据实时变化。目前RDBMS支持mysqloracle数据源(Oracle数据源请参考Oracle相关协议), 日志方面支持基于logstashflumefilebeat的多种数据日志抽取方案。
  2. 海量数据实时传输: 使用基于Storm的流式计算框架,秒级延时,整体无单点保证高可用性。
  3. 多租户支持: 提供用户管理、资源分配、Topology管理、租户表管理等丰富的功能,可根据需求,为不同租户分配不同的源端表数据访问权限,应用不同的脱敏规则,从而实现多租户资源隔离、差异化数据安全。
  4. 详细参考:
  5. https://bridata.github.io/DBus/index.html

image_1ep5usqlshqh1la7q4e1utg1a6g1g.png-377kB

image_1ep5utbk01tnhmah49c10brici1t.png-390kB


三:Dbus 部署

3.1 Dbus部署

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

3.2 dbus all in one 部署

3.2.1 软件准备系统:

  1. 系统:
  2. CentOS7.9x64
  3. hostname Dbus-ns1
  4. 说明all in one是一个单机版本dbus环境,是给用户快速体验dbus的功能,只是一个简单体验版,不能
  5. 用于其它环境或者用途,具体包括如下:
  6. 基础组件:
  7. zookeeper 3.4.6
  8. kafka 0.10.0.0
  9. storm 1.0.1
  10. granfana 4.2.0
  11. logstash 5.6.1
  12. influxdb
  13. mysql
  14. ---------------------------
  15. dbus相关包:
  16. dbus-keeper 0.5.0
  17. dbus-stream-main 0.5.0
  18. dbus-keeper 0.5.0
  19. dbus-stream-main 0.5.0
  20. dbus-router 0.5.0
  21. dbus-heartbeat 0.5.0
  22. dbus-log-processor 0.5.0
  23. --------------------------
  24. mysql数据源所需软件:
  25. canal

3.2.3 安装MySQL

  1. Canal MySQL的需求版本5.7 以上:
  2. -----------------------
  3. 安装MySQL5.7 yum
  4. yum -y localinstall https://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
  5. 安装MySQL
  6. yum -y install mysql-community-server
  7. systemctl enable mysqld
  8. systemctl start mysqld
  9. systemctl status mysqld
  10. grep 'temporary password' /var/log/mysqld.log

image_1ep6177521e4k1ltm1rb81t3l14042n.png-189.3kB

image_1ep616j34jh01bn9ega1n3a1vg2a.png-142.7kB


  1. set global validate_password_policy=0;
  2. set global validate_password_mixed_case_count=0;
  3. set global validate_password_number_count=3;
  4. set global validate_password_special_char_count=0;
  5. set global validate_password_length=3;
  6. ALTER USER 'root'@'localhost' IDENTIFIED BY 'root%123';
  7. exit

image_1ep61e55u1n0dhfm141uf329p34.png-95.5kB

image_1eq22tuhb1vn7uk1oppecb1uhs9.png-118.2kB

  1. sudo vi /etc/my.cnf
  2. [mysqld]
  3. # dbus相关配置开始
  4. log-bin=mysql-bin
  5. binlog-format=ROW
  6. server_id=1
  7. # dbus相关配置结束
  8. 然后重启MySQL:
  9. sudo systemctl restart mysqld

image_1ep61h4av91btfe455pao18334b.png-47kB

3.2.4:配置influxdb

  1. wget https://dl.influxdata.com/influxdb/releases/influxdb-1.1.0.x86_64.rpm
  2. sudo yum -y localinstall influxdb-1.1.0.x86_64.rpm
  3. sudo systemctl start influxdb
  4. sudo systemctl status influxdb
  5. sudo systemctl enable influxdb

image_1ep61lam51bpq19st8tbgsnnlh4o.png-219.7kB

image_1ep61ltk0l9g1f1kt1l184c1akd55.png-283.9kB

  1. 初始化 influx
  2. #执行初始化脚本
  3. create database dbus_stat_db
  4. use dbus_stat_db
  5. CREATE USER "dbus" WITH PASSWORD 'dbus!@#123'
  6. ALTER RETENTION POLICY autogen ON dbus_stat_db DURATION 15d
  7. exit

image_1ep61q7f6pbnj111m0nvq11br05i.png-97.9kB

3.2.5 配置 allinone dbus

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

image_1ep627idecb6111h11oio471jsp5v.png-40.8kB

  1. 导入MySQL数据
  2. 执行以下命令进行数据库初始化,会创建dbmgr库以及用户、canal用户、dbus库以及用户、testschema库以及用户:
  3. MySQL
  4. mysql -uroot -proot%123
  5. source /app/dbus-allinone/sql/init.sql

image_1ep62br4e1sb91ubuc7se7c2n26c.png-149.6kB

3.2.6 启动DBus

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

image_1ep83e3bu8cl1e6l1u9g1av6iuf9.png-130.5kB

3.2.7 生成启动报告

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

image_1erqr8p7i26ppav1kde3olslm9.png-198.3kB

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

image_1erqrad9br66df24891llh1alsm.png-155.1kB

3.2.8 导入数据测试

  1. 验证MySQL数据是否能增量采集很简单,先打开grafana监控,然后在MySQL里插入数据,看监控是否显示DBus已经采集到。
  2. 验证机配置hosts 文件
  3. 我们在Windows上远程登录Grafana 修改C:\Windows\System32\drivers\etc\hosts文件设置相应的域名信息如下:
  4. 替换成部署allinone包的服务器ip地址 192.168.100.11 dbus-n1

  1. 登录grafana
  2. 登录grafana url地址: http://dbus-n1:3000/login
  3. 默认 用户 admin/admin

image_1erqrhfko2tvng4107i1t2610vq1g.png-254.7kB

  1. mysql插入数据验证
  2. #登录测试用户
  3. mysql -utestschema -p #testschema账户密码:j0<C6cqcqr:TestSchema
  4. #执行测试脚本
  5. use testschema;
  6. INSERT INTO test_table (NAME, BIRTHDAY) VALUES ('testdataname', '2018-08-10 18:00:00');
  7. INSERT INTO test_table (NAME, BIRTHDAY) VALUES ('testdataname', '2018-08-10 18:00:00');
  8. INSERT INTO test_table (NAME, BIRTHDAY) VALUES ('testdataname', '2018-08-10 18:00:00');
  9. INSERT INTO test_table (NAME, BIRTHDAY) VALUES ('testdataname', '2018-08-10 18:00:00');
  10. INSERT INTO test table (NAME, BIRTHDAY) VALUES ('testdataname', '2018-08-10 18:00:00');

image_1erqrg2ab15aq1sfj1lvd7mksjv13.png-322.7kB


  1. 验证日志数据采集
  2. dbus-heartbeat心跳模块儿产生日志位置在:/app/dbus-allinone/dbus-heartbeat-
  3. 0.5.0/logs/heartbeat/heartbeat.log,利用logstash抽取该日志文件,把非结构化的数据,提取成结构化的数据
  4. 我们可以看他他定期会产生日志:
  5. cd /app/dbus-allinone/dbus-heartbeat-0.5.0/logs/heartbeat/ tail -f heartbeat.log

image_1erqrs8ojqf91aunvjkthn931t.png-289.3kB

3.2.8 打开web

  1. http://dbus-n1:6090/login
  2. admin/12345678

image_1erqrvckq1j3v19ij1a2p83eccl2a.png-2128.4kB

image_1erqs01p0j5c5971lep11bs1h4a2n.png-253.8kB

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

image_1erqs1sqhqcplveftv1di31d2i34.png-2283.9kB

image_1erqs45dr6rp1u9i3bo1ngu1ro53h.png-159.7kB

image_1erqu79ba1rb01b9c1u531ngrn3f5u.png-238.2kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注