简单介绍

参考:databus架构

##databus github 地址

databus-github地址

databus

安装gradle

下载gradle

gradle下载

安装gradle

  • 解压 gradle-4.5.1-bin.zip 到一个目录下
  • 配置环境变量
        1.GRADLE_HOME = E:\dev-tools\gradle-4.5.1
        2.Path = %GRADLE_HOME%\bin
        3.打开命令行工具:gradle -v 

下载databus代码

clone 一份代码到本地

git clone https://github.com/linkedin/databus.git

使用idea打开源代码

  • 在databus 主目录下的build.gradle 添加如下代码

    tasks.withType(JavaCompile) {
        options.encoding = "UTF-8"
    }
    
    tasks.withType(GroovyCompile) {
        groovyOptions.encoding = "MacRoman"
    }
    
  • databus主目录subprojects.gradle 177行修改为

    if (JavaVersion.current().isJava8Compatible()) {
      allprojects {
        tasks.withType(Javadoc) {
          options.addStringOption('Xdoclint:none', '-quiet')
          options.encoding("UTF-8")
          options.charSet("UTF-8")
        }
      }
    }
    
  • 下载ojdbc6.jar
    copy ojdbc6.jar 到sandbox-repo/com/oracle/ojdbc6/11.2.0.2.0 下
    重命名ojdbc6.jar为ojdbc6-11.2.0.2.0.jar

  • 在databus主目录下执行编译

   gradle -Dopen_source=true assemble 
   

运行databus的mysql demo

mysql5.7+ 安装一份 开启binlog 且 格式为ROW
  • 在数据库中创建表person,并插入数据

    CREATE TABLE IF NOT EXISTS person
    (
            id bigint primary key PRIMARY KEY AUTO_INCREMENT,
            first_name varchar(120) not null,
            last_name varchar(120) not null,
            birth_date date,
            deleted varchar(5) default 'false' not null
    );
    INSERT INTO person(first_name, last_name, birth_date)
           VALUES('balaji', 'varadaran', '1980-01-01');
    INSERT INTO person(first_name, last_name, birth_date)
           VALUES('boris', 'shkolnik', '1981-02-02'),
                 ('sunil', 'nagaraj', '1982-03-03');
    INSERT INTO person(first_name, last_name, birth_date)
           VALUES('chavdar', 'botev', '1983-04-04'),
                 ('phanindra', 'ganti', '1984-05-05'),
                 ('sajid', 'topiwala', '1985-06-06'),
                 ('naveen', 'somasundaram', '1984-05-05');
    INSERT INTO person(first_name, last_name, birth_date)
           VALUES('greg', 'roelofs', '1985-06-06'),
                 ('kapil', 'surlaker', '1986-07-07');
    
    
    
准备linux系统,虚拟机,并安装jdk8
编译打包文件
relay
  • 修改 databus2-example-relay-pkg/sources-or-person.json

    {
        "name" : "person",
        "id"  : 1234,
        "uri" : "mysql://root%2Froot@192.168.22.101:3306/1234/mysql-bin",
        "slowSourceQueryThreshold" : 2000,
        "sources" :
        [
            {
            "id" : 40,
            "name" : "com.linkedin.events.example.or_test.Person",
            "uri": "or_test.person",
            "partitionFunction" : "constant:1"
             }
        ]
    }


    id 修改为mysql的serverid,sources 中的name 修改为com.linkedin.events.example.or_test.Person
    这个对应databus2-example-relay-pkg/schemas_registry/com.linkedin.events.example.or_test.Person.1.avsc

uri: 含义
mysql://username/password@mysql_host[:mysql_port]/mysql_serverid/binlog_prefix

client
  • 修改 PersonClientMain

open replicator

    由于新版本的mysql binlog 格式变化了,所以我们需要使用新包open-replicator 1.6
    修改subprojects.gradle 文件
   

开始编译打包

    databus/build 目录下
    1、databus2-example-relay-pkg/distributions/databus2-example-relay-pkg-2.0.0.tar.gz
    2、databus2-example-client-pkg/distributions/databus2-example-client-pkg-2.0.0.tar.gz
    copy 以上两个包到linux服务器上
    解压后首先运行reply ./bin/start-example-relay.sh or_person -Y ./conf/sources-or-person.json
    在运行./start-example-client.sh person
    观察client的日志目录 client.log ,tail -f client.log
    修改表person中的数据 update person set first_name='Boy' where id=1;

注意: 由于是在windows编译的,shell脚本运行时可能报错,需要到bin目录下执行

     sed -i 's/\r$//' *