@zhangyy
2021-01-12T17:20:05.000000Z
字数 5065
阅读 253
DBus系列
采集工具的局限性
当前有很多数据采集工具,他们或多或少都存在一些局限性:
上面这些采集工具还以一个共性问题是缺乏统一的数据源端管控,所以也就无法找到统一的数据入口,
那后续处理元数据或者血缘分析会异常困难。
数据同步方法局限性
同时过去通常的同步数据的方法有很多种,比如:
各个数据使用方在业务低峰期各种抽取所需数据(缺点是存在重复抽取而且数据不一致)
由统一的数仓平台通过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
DBus安装部署分为以下两种方式(注意:两种方式不可以混用):
All In One体验版
该版本安装在单机上,自动部署安装dbus所依赖的相关组件,仅用于体验dbus基本功能,
不可以用于生产。
该版本支持mysql数据源接入体验。
集群部署
用于生产环境或测试环境部署。
可部署在单机上或集群上。
包含对Oracle、mysql,logstash、filebeat、flume等数据源的支持。
系统:
CentOS7.9x64
hostname Dbus-ns1
说明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租户界面如下: