步骤1、安装达梦8国产数据库
参考笔者之前写的博文,怎么安装国产达梦8数据库,按博文提前装好!
https://blog.csdn.net/nasen512/article/details/126872483   
 

步骤2、安装好clickhouse数据库
参考笔者之前写过的博文,将clickhouse数据库提前安装好!
https://blog.csdn.net/nasen512/article/details/126954425
 

步骤3、安装etl中间件ClickHouse JDBC Bridge
Clickhouse-jdbc-bridge:是clickhouse提供的一个jdbc组件,用于通过JDBC的方式远程访问其他数据库表。
Clickhouse支持通过JDBC连接外部数据库,所有支持JDBC驱动的数据库都能直接接入clickhouse。要实现JDBC连接,clickhouse需要使用以后台进程运行的程序 clickhouse-jdbc-bridge。
 JDBC表引擎可以对接Mysql、Postgresql、SQLite等数据库,但是JDBC表引擎不能单独完成对接工作,需要依赖clickhouse-jdbc-bridge的查询代理服务,clickhouse-jdbc-bridge是java语言实现的sql代理服务,项目地址为:
https://github.com/ClickHouse/clickhouse-jdbc-bridge   #作者的资源库有直接可以去下载RPM安装包
 
https://clickhouse.com/docs/zh/engines/table-engines/integrations/jdbc    # clickhouse官网的介绍
 

 
 我们看懂架构图,则需要保证
 ClickHouse JDBC Bridge第三方插件要能正常练到2个数据库。我们可以把这个插件看出是2个数据库直接的桥梁!
 达梦8数据库肯定是完整支持jdbc协议的,所以这个就存在2个数据库数据类型的一一映射关系,这个关系,就在ClickHouse JDBC Bridge维护。
 
步骤4、ClickHouse JDBC Bridge安装部署方法
一、ClickHouse JDBC Bridge下载安装RPM包
https://github.com/ClickHouse/clickhouse-jdbc-bridge    #github下载地址
 
直接去笔者的资源库自行去下载更方便
 
 
rpm -ivh  clickhouse-jdbc-bridge-2.1.0-1.noarch.rpm    #安装命令
 
二、ClickHouse JDBC Bridge 配置
cd /etc/clickhouse-jdbc-bridge/config/datasources      #安装成功后自动生成配置路径
 
根据模板生成配置
touch datasource.json   #创建配置文件
 
{
  "$schema": "../datasource.jschema",
  "ch-server": {
    "aliases": [
      "self"
    ],
    "driverUrls": [
      "https://repo1.maven.org/maven2/com/clickhouse/clickhouse-jdbc/0.3.2-patch8/clickhouse-jdbc-0.3.2-patch8-http.jar"
    ],
    "driverClassName": "com.clickhouse.jdbc.ClickHouseDriver",
    "jdbcUrl": "jdbc:clickhouse://172.18.21.68:8123/system?compress=false",
    "username": "default",
    "password": "",
    "maximumPoolSize": 5
  },
 "dm-server": {
    "aliases": [
      "dm"
    ],
    "timezone":"GTM+8",
     "converter": {
              "mappings": [{ "nativeType": "TIMESTAMP", "toType": "String" },
              { "nativeType": "DATE", "toType": "String" }]
                      },
    "driverUrls": [
      "/etc/clickhouse-jdbc-bridge/drivers/DmJdbcDriver18.jar"
    ],
    "driverClassName": "dm.jdbc.driver.DmDriver",
    "jdbcUrl": "jdbc:dm://172.18.21.147:5236/NASEN",
    "username": "NASEN",
    "password": "",
    "maximumPoolSize": 100
  }
}
 
{
  "$schema": "../datasource.jschema",
  "ch-server": {
    "aliases": [
      "self"
    ],
    "driverUrls": [
      "https://repo1.maven.org/maven2/com/clickhouse/clickhouse-jdbc/0.3.2-patch8/clickhouse-jdbc-0.3.2-patch8-http.jar"
    ],
    "driverClassName": "com.clickhouse.jdbc.ClickHouseDriver",
    "jdbcUrl": "jdbc:clickhouse://172.18.25.88:8123/system?compress=false",
    "username": "default",
    "password": "123456",
    "maximumPoolSize": 5
  },
 "dm-server": {
    "aliases": [
      "dm"
    ],
   "timezone":"GTM+8",
    "driverUrls": [
      "/etc/clickhouse-jdbc-bridge/drivers/DmJdbcDriver18-8.1.2.141.jar"
    ],
    "driverClassName": "dm.jdbc.driver.DmDriver",
    "jdbcUrl": "jdbc:dm://172.18.21.167:5236?SCHEMA=dbname&localTimezone=480",
    "username": "nasen",
    "password": "123",
    "maximumPoolSize": 100
  }
 
上传启动包
cd /etc/clickhouse-jdbc-bridge/drivers
 

clickhouse-jdbc-0.3.2-patch8-http.jar
dm8-oracle-jdbc16-wrapper.jar
DmJdbcDriver18.jar
 
三、后台启动ClickHouse JDBC Bridge服务
nohup clickhouse-jdbc-bridge > /home/clickhouse-jdbc-bridge.log 2>&1 &
 
四、clickhouse设置与ClickHouse JDBC Bridge联通配置
cd /etc/clickhouse-server  #进到配置路径
 
vi config.xml   #追加配置文件最后
 
在文件最后追加下面内容
 <jdbc_bridge>
        <host>172.18.21.141</host>
        <port>9019</port>
    </jdbc_bridge>
 
五、clickhouse测试验证
select * from jdbc('', 'show datasources')
 
select * from jdbc('dm', 'select * from NASEN.NASEN_TEST')
 
作者总结
过程中遇到了一些问题比如时区的问题,数据同步之后,时区相差8小时!
 过程很复杂,分析源码,反复测试,最终发现还有个隐藏的java时区的配置。是反复看了源码,最终猜出来的。
 当然也是下段配置得到线索,最终通过代码加了那个配置。测试正常了!
 笔者是去github上拿下源码,恢复到自己电脑上,凭运气分析,猜出来的,居然有个神秘的时区配置。
https://blog.csdn.net/nasen512/article/details/128446822  #笔者解决同步之后时间时常问题
 
把整个技术数据流程串联起来,就能完成达梦数据库与clickhouse数据的同步!当然clickhouse-jdbc-bridge是github上的国外的公益团队开发的插件,给他们点赞。笔者也把自己的经验写出来,希望可以帮助大家。
笔者自己攻克这个技术难题私下也是花了很多的时间,去攻读国外读文档,也参考很多同僚的文章总结的,整个过程还是挺不容易,尤其是解决那个时区的问题!
作者本人简介:现任国内某大型软件公司大数据研发工程师、MySQL数据库DBA,软件架构师。直接参与设计国家级亿级别大数据项目。并维护真实企业级生产数据库上千余个。紧急处理数据库生产事故上百起,挽回数据丢失所操作的灾难损失不计其数。



















