声明:本文基于2018年10月份 发版的0.5版本进行安装实验。
dbus产生背景
首先了解下当下的采集工具。
1.我们发现,采集工具都有各自的优点和应用场景,但是都缺乏统一的数据源端管控。所以无法找到统一的数据入口。
2.
- 各个数据使用方在业务低峰期各种抽取所需数据(缺点是存在重复抽取而且数据不一致)
- 由统一的数仓平台通过sqoop到各个系统中抽取数据(缺点是sqoop抽取方法时效性差,一般都是T+1的时效性)
- 基于trigger或时间戳的方式获得增量的变更(缺点是对业务方侵入性大,带来性能损失等)
为了同时解决数据一致性和实时性的问题,比较合理的方法应该是基于日志的解决方案,同时能够提供消息订阅的方式给下游系统使用。在这个背景下dbus就诞生了。
dbus应用场景
- 数仓平台和数据分析平台
- 实施营销策略
- 实时报表展示
- 异构数据实时同步
- 其他实时性要求高的系统
DBUS组成部分
dbus主要分为2部分组成。贴源数据采集 和 多租户数据分发。
贴源数据采集
- 读取RDBMS增量日志的方式来实时获取增量数据日志,并支持全量拉取。
- 基于logtash,flume,filebeat等抓取工具来实时获取数据,以可视化方式对数据进行结构化输出。
- 全量抽取模块 (dbus-fullpuller) 将全量数据从RDBMS备库拉取并转换为UMS数据。
- 日志抓取模块 (dbus-mysql-extractor) 从RDBMS的备库中读取增量日志,并实时同步到Kafka中。
- 增量转换模块 (dbus-stream) 将增量数据实时转换为UMS数据,处理schema变更,脱敏等。
- 日志算子处理模块 (dbus-log-processor) 将来自不同抓取端的日志数据按照算子规则进行结构化处理.
- 心跳监控模块 (dbus-heartbeat) 对于RDBMS类源,定时向源端发送心跳数据,并在末端监控发送预警,对于 日志类,直接在末端监控预警。
- web管理模块 (keeper-web) 管理所有相关模块
多租户数据分发
对于不同租户对不同源端数据有不同访问权限,脱敏需求的情形,需要引入Router分发模块中,将源端贴源数据,根据配置好的权限,用户有权获取的源端表,不同脱敏规则等,分发到分配给租户的topic,在DBUS管理系统中,涉及到用户管理,Sink管理,资源分配,脱敏配置等。不同项目消费分配给他的topic.
意思就是对于每个租户来说,可以分配到不同的topic。每个租户可以在所属项目需要的topic中获取到需要的数据。然而这一切dbus都已经做好了。
源码编译 (前后端分离)
后端
1. git clone https://github.com/BriData/DBus.git
2. cd DBUS/ 3. git checkout v0.5.0
4. 适配源码
pom.xml 根据自己的版本自行选择. dbus-keeper\keeper-base\pom.xml和 最外层 pom.xml这里都需要修改
dbus-commons->pom.xml <!-- 你需要添加 mysql 依赖在这里 mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.35</version> </dependency> <!-- 你需要添加 oracle 依赖在这里 ojdbc7 --> <!--mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 Dversion=10.2.0.2.0 -Dpackaging=jar -Dfile=ojdbc14-10.2.0.2.0.jar DgeneratePom=true--> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.2.0</version> </dependency>
修改sql: /DBus/dbus-keeper/conf/init/dbus_mgr.sql -- ---------------------------- -- Table structure for t_name_alias_mapping -- ---------------------------- DROP TABLE IF EXISTS `t_name_alias_mapping`; CREATE TABLE `t_name_alias_mapping` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `type` int(2) NOT NULL COMMENT '别名类型1,router拓扑别名;2,增量拓扑别名', `name` varchar(64) NOT NULL COMMENT '名称', `name_id` int(11) NOT NULL COMMENT '名称对应ID', `alias` varchar(64) NOT NULL COMMENT '别名', `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='别名表';
/DBus/dbus-heartbeat/assembly.xml <fileSet> <directory>${project.basedir}\sh</directory> <outputDirectory>\</outputDirectory> 添加 <fileMode>0755</fileMode> 添加 <lineEnding>unix</lineEnding> </fileSet>
执行 mvn clean package
有个包可能很难下载 :Could not find artifact com.oracle:ojdbc14:jar:10.2.0.2.0 in central (https://repo.maven.apache.org/maven2) -> [Help 1]
所以,后面提供了jar。自行加到maven仓库即可。
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 Dversion=10.2.0.2.0 -Dpackaging=jar -Dfile=/home/hadoop/.m2/repository/com/oracle/ojdbc14/10.2.0.2.0/ojdbc14-10.2.0.2.0.jar DgeneratePom=true
前端
1.自行安装nodejs. 2.npm install -g cnpm --registry=https://registry.npm.taobao.org
3. cd /home/hadoop/gitData/dbus/DBus/dbus-keeper/keeper-web 到Dbus -> keeper-web目录下。 4. cnpm install 5. cnpm run build
本节使用jar和编译好的dbusjar地址
链接:https://pan.baidu.com/s/1ohy2dechFSRgQunJ4SJA8Q
提取码:hggs
dbus集群部署
依赖组件
部署
1.unzip dbuskeeper_web.zip
重新配置nginx
2.sudo mv /home/hadoop/app/dbus/dbuskeeper_web/nginx.conf /etc/nginx/
3.sudo mv /home/hadoop/app/dbus/dbuskeeper_web/build.zip /usr/share/nginx/html/
cd /usr/share/nginx/html/
sudo unzip build.zip
4.sudo systemctl restart nginx
5.修改Dbus-keeper
vi /home/hadoop/app/dbus/dbuskeeper_web/config.properties
zk.str=node01:2181 # mysql管理库相关配置,其中mysql驱动可以不改 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://node01:3306/dbusmgr?characterEncoding=utf-8 spring.datasource.username=dbusmgr spring.datasource.password=dbusmgr%123 bootstrap.servers=node02:6667 bootstrap.servers.version=2.0.0 #influxdb地址:influxdb_url_web(外网地址),influxdb_url_dbus(内网地址),不区分内外网相同 即可 influxdb_url_web=http://node03:8086 influxdb_url_dbus=http://node03:8086 #nginx地址 nginx.ip=node03 nginx.port=8080
6.启动
cd /home/hadoop/app/dbus/dbuskeeper_web
chmod u+x init.sh start.sh stop.sh
初始化 ./init.sh
启动web ./start.sh
查看集群状态
实战使用
0. 配置dbus-canal /home/hadoop/app/dbus/dbus-canal-auto-0.5.0/conf/canal-auto.properties
#数据源名称,需要与dbus keeper中添加的一致
dsname=lg_dbusMtoK
#zk地址,替换成自己的信息
zk.path=node01:2181,node02:2181,node03:2181
#canal 用户连接地址。即:要canal去同步的源端库的备库的地址
canal.address=node02:3306
#canal用户名
canal.user=canal
#canal密码,替换成自己配置的
canal.pwd=canal%123
启动canal.
./deploy.sh
1.新建数据总线
主库URL:
jdbc:MySQL://node01:3306/dbus?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&noAccessToProcedureBodies=true&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false
从库URL:
jdbc:MySQL://node02:3306/dbus?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&noAccessToProcedureBodies=true&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false
2.勾选要同步数据的表
3.
查看topic
检查数据项:
验证增量:
全量: