Dbus数据总线(基于0.5.0) 深入理解,源码适配修改编译全过程,集群部署,使用操作

声明:本文基于2018年10月份 发版的0.5版本进行安装实验。

dbus产生背景

首先了解下当下的采集工具。

                                             

1.我们发现,采集工具都有各自的优点和应用场景,但是都缺乏统一的数据源端管控。所以无法找到统一的数据入口。

2.

  • 各个数据使用方在业务低峰期各种抽取所需数据(缺点是存在重复抽取而且数据不一致)
  • 由统一的数仓平台通过sqoop到各个系统中抽取数据(缺点是sqoop抽取方法时效性差,一般都是T+1的时效性)
  • 基于trigger或时间戳的方式获得增量的变更(缺点是对业务方侵入性大,带来性能损失等)

为了同时解决数据一致性和实时性的问题,比较合理的方法应该是基于日志的解决方案,同时能够提供消息订阅的方式给下游系统使用。在这个背景下dbus就诞生了。

dbus应用场景

  1. 数仓平台和数据分析平台
  2. 实施营销策略
  3. 实时报表展示
  4. 异构数据实时同步
  5. 其他实时性要求高的系统

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

检查数据项:

验证增量:

全量:

猜你喜欢

转载自blog.csdn.net/weixin_40954192/article/details/107211134
今日推荐