[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租户界面以下: