databus教程_搭建区观察记录表

databus教程_搭建区观察记录表最近公司因需要同步oracle数据到mysql,调研了Datax对于大数据量的同步代价有些大。开源的databus需要对源码做二次开发,才可以使用,前期我们搭建后,用自带的person表做了测试。确认可行后研发更改了源码。准备工作:1.配制gradle和java2.ojdbc6-11.2.0.2.0.jar放到如下目录:databus-master/sandbox-repo/com/oracle/ojdbc6/11.2.0.2.0/更改defaultEnvironment.gradl

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

最近公司因需要同步oracle数据到mysql ,调研了Datax 对于大数据量的同步代价有些大。开源的databus 需要对源码做二次开发,才可以使用,前期我们搭建后,用自带的person表做了测试。确认可行后研发更改了源码。

准备工作:
1.配制gradle 和 java
2.ojdbc6-11.2.0.2.0.jar放到如下目录:
databus-master/sandbox-repo/com/oracle/ojdbc6/11.2.0.2.0/
更改defaultEnvironment.gradle文替换链接中https为http.
编译databus : gradle -Dopen_source=true clean | assemble

开始搭建:
一. –更改配置信息:

1. 更改 databus-master/databus2-example/database/person/ 下配制 增加相关建表、视图语句和tableapce名称 每个表包括.tab 和 .view两个文件。
建表时需要在最后一行 txn number 字段. 建视图时候需要 把id 列加上别名 key.
2. databus-master/databus2-example/databus2-example-relay-pkg/conf/sources-person.json 连接oracle时候加上ip 及修改相关同步表的信息。
3. 默认路径在 /root/databus-master

二. –更改client的配置 后续打包后生成build_pkg时使用:

cd databus2-example/databus2-example-client/src/main/sources
vim db.properties 更改连接库信息
vim client.properties 更改成Relay的端口 配置同步的表信息

–增加以下文本 以同步两张表为例
databus.client.runtime.relay(1).sources=com.linkedin.events.example.person.PrrangeCourse,com.linkedin.events.example.person.plusManager

三. –更改源码的配制信息

vim databus2-example/databus2-example-client/src/main/java/com/linkedin/databus/client/example/PersonClientMain.java #更改db的配制文件目录
vim databus2-example/databus2-example-client/src/main/java/com/linkedin/databus/client/example/xml/XmlParser.java #更改configure文件目录

四. –更改并创建数据库相关信息

vim db/oracle/bin/createUser.sh 更改system密码及创建用户信息。注意:如果表中已存在表 执行多次时候时候 要注释掉删除用户语句。

vim /root/databus-master/db/oracle/bin/createSchema.sh 创建db的包 过程 触发器 函数等。

五. –编译并生成数据库文件 序列化文件

编译databus : gradle -Dopen_source=true [assemble | clean]

sh db/oracle/bin/createUser.sh user pass instance_name tablespace /datadir #创建用户

cd db/oracle/fwk
sh /root/databus-master/db/oracle/bin/createSchema.sh user/pass@orcl /root/databus-master/databus2-example/database/person/

mkdir -p /root/databus-master/myperson-avro/avroOut –保存表的字段描述信息
mkdir -p /root/databus-master/myperson-avro/javaOut –保存源码文件

mkdir -p /root/databus-master/myperson-avro/avroOut –保存表的字段描述信息
mkdir -p /root/databus-master/myperson-avro/javaOut –保存源码文件

sh dbus2-avro-schema-gen.sh -namespace com.linkedin.events.example.person -recordName TplusManager -viewName “sy$t_plus_manager” -avroOutDir /root/databus-master/myperson-avro/avroOut -avroOutVersion 1 -javaOutDir /root/databus-master/myperson-avro/javaOut -userName user -password password -database jdbc:oracle:thin:@10.6.6.1:1521:ORCL
#生成序列化文件 注意 配制同步多个表 需要执行多次

六.–更改序列化和生成的源码文件

表中第一行  "meta" : "dbFieldName=sy$t_plus_manager;pk=KEY;",  用pk=KEY替换最后一个段
java文件也是  public static final org.apache.avro.Schema SCHEMA$最后一行同样

#将源码和序列化文件cp到指定目录
cd databus2-example/databus2-example-person/src/main/java/com/linkedin/events/example/person
cp /root/databus-master/myperson-avro/javaOut/com/linkedin/events/example/person/* ./

cd databus2-example/databus2-example-relay-pkg/schemas_registry/
cp /root/databus-master/myperson-avro/avroOut/* ./

#将cp过来的avsc文件添加到index文件中
vim index.schemas_registry

cd databus2-example/schemas_registry/
cp /root/databus-master/myperson-avro/avroOut/* ./

#编译databus : gradle -Dopen_source=true clean | assemble

七.创建client和relay目录 解包可运行代码

确保client下包括 client.properties configure.xml db.properties 或是确认这几个文件保存在java文件所指的目录
mkdir client relay
cd client
tar xvzf build/databus2-example-client-pkg/distributions/databus2-example-client-pkg-2.0.0.tar.gz ./

cd …/relay
tar xvzf build/databus2-example-relay-pkg/distributions/databus2-example-relay-pkg-2.0.0.tar.gz ./

八 – 运行relay 和 client

#person 是指conf/sources-person.json 文件
sh relay/bin/start-example-relay.sh person
sh client/bin/start-example-client.sh person

九.– 最后遇到的问题

问题:

  1. 更新数据时候 新插入一条记录: client 配置文件中没有指定key id 后加上 alias=“KEY” 参考如下脚本

2.Cannot bind to URL rmi://localhost:1099 ServiceUnavailableException错误
在databus-core/databus-core-container/src/main/java/com/linkedin/databus2/core/container/netty/ServerContainer文件的initializeContainerJmx方法倒第二行加
LocateRegistry.createRegistry(_containerStaticConfig.getJmx().getRmiRegistryPort());

在此文件头引入相关包 import java.rmi.registry.LocateRegistry;

–生成client的表的配置文件脚本如下:
[root@test2 tedu]# cat genconfig.py

import sys

HEADTXT="\n <field name="
TAILTXT="/>"

TAB_HEAD =" <source name=\"com.linkedin.events.example.person\" id=\"{}\" table={} db=\"mysql\" logEnable=\"true\"> \n <fields>"
TAB_TAIL = "\n </fields> \n </source>"
##read file content 
""" ### file format ### create table *** ( \"col1\" type, \"col2\" type, ) gnerate two files named table_name.sql and table_name.xml """

def read_file(filename,outputfile,id=101):
  xml = open(outputfile+".xml",'a')
  sql = open(outputfile+".sql",'a')
  strxml = ""
  strsql = ""
  idflag = False
  with open(filename,'r') as f:
    for line in  f.readlines():
      #print(line)
      if " TABLE " in line:  #create table 
        strxml = TAB_HEAD.format(id,line[line.find('"'):])
        strsql = line.replace('"','')
      elif " PRIMARY KEY " in line: #last line of create table
        strxml = TAB_TAIL
        strsql = ')'
        id = id+1
      elif "(" in line[0:9]:             #"(" in createtable 
        idflag=True
        continue
      else:                         #process line 
        strxml = HEADTXT+(line[:line.rfind('"')+1].strip())

        if 'ID' in line and idflag: #primarykey field must add ...
          strxml+= " alias=\"KEY\" primaryKey=\"true\" "
          idflag=False
        if ' DATE' in line:
          strxml += ' type="java.util.Date"'
          strsql = line.replace(" DATE"," datetime")
          strsql = strsql.replace('"','')
        elif ' NUMBER' in line:
          strxml += ' type="double"'
          strsql = line.replace(" NUMBER"," bigint")
          strsql = strsql.replace('"','')
        else:
          strsql = line.replace(" VARCHAR2"," varchar")
          strsql = strsql.replace('"','')
        strxml +=TAILTXT
      xml.write(strxml)    
      sql.write(strsql)
  xml.close()
  sql.close()

if __name__ == '__main__':
  read_file(sys.argv[1],sys.argv[1]) 
  #for x in sys.argv:
  # print(x) 

参考链接:

https://github.com/linkedin/databus

https://blog.csdn.net/jyf19/article/details/104555803/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183829.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 主宰操作系统的经典算法

    主宰操作系统的经典算法此篇文章带你梳理一下操作系统中都出现过哪些算法进程和线程管理中的算法进程和线程在调度时候出现过很多算法,这些算法的设计背景是当一个计算机是多道程序设计系统时,会频繁的有很多进程或者线程来同时竞争CPU时间片。那么如何选择合适的进程/线程运行是一项艺术。当两个或两个以上的进程/线程处于就绪状态时,就会发生这种情况。如果只有一个CPU可用,那么必须选择接下来哪个进程/线程可以运行。操作系统中有一个叫做调度程序(scheduler)的角色存在,它就是做这件事儿的,调度程序使用的算法叫做调度算

    2022年6月4日
  • 2000款商务通用PPT模板免费下载[通俗易懂]

    2000款商务通用PPT模板免费下载[通俗易懂]0001-大气黑金年终工作总结PPT模板.zip:https://baippt.ctfile.com/fs/5288276-3454633710002-简约大气工作总结PPT模板.zip:https://baippt.ctfile.com/fs/5288276-3454633380003-商务风职业规划PPT模板.zip:https://baippt.ctfile.com/fs/5288…

    2022年7月24日
  • 如何通过 OIDC 协议实现单点登录?[通俗易懂]

    如何通过 OIDC 协议实现单点登录?[通俗易懂]什么是单点登录我们通过一个例子来说明,假设有一所大学,内部有两个系统,一个是邮箱系统,一个是课表查询系统。现在想实现这样的效果:在邮箱系统中登录一遍,然后此时进入课表系统的网站,无需再次登录,课表网站系统直接跳转到个人课表页面,反之亦然。比较专业的定义如下:单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中…

    2022年10月21日
  • 2021最新java详细学习路线及路线图(超详细)「建议收藏」

    2021最新java详细学习路线及路线图(超详细)「建议收藏」本文将告诉你学习Java的一些步骤,学习过程中可能遇到的问题,及学习路线。希望能够对你的学习有所帮助。文末给大家准备了惊喜,希望大家都能够坚持看完哦~一、Java基础二、Java学习七大阶段[阶段1、JavaSE基础][阶段2、WEB前端][阶段3、数据库][阶段4、JavaWeb][阶段5、JavaWeb项目][阶段…

    2022年6月16日
  • pycharm安装教程2020.3_如何下载安装eclipse

    pycharm安装教程2020.3_如何下载安装eclipse简介PyCharm是一款PythonIDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如,调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。安装1.进入Pycharm官网的下载地址:链接:http://www.jetbrains.com/pycharm/download/#section=windows.2.professional表示专业

    2022年8月27日
  • embedded dylibs/frameworks are only supported on iOS 8.0 and later 错误解决[通俗易懂]

    embedded dylibs/frameworks are only supported on iOS 8.0 and later 错误解决

    2022年1月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号