一键实现Oracle数据整库同步至 Apache Doris的验证实录

看到一键实现万表 MySQL 整库同步至 Apache Doris这篇文章(一键实现万表 MySQL 整库同步至 Apache Doris (qq.com))就下载flink-doris-connector代码验证了一下,并记录整理分享给大家。当我下载的代码时支持mysql cdc,oracle cdc和pg;目前最新代码也支持微软的sql server 的cdc 。

体系结构

oracle -> flink-doris-connector -> doris db

flink-doris-connector 工具build 好就是一个jar包,放入flink的lib里面就能用

用它抽取oracle cdc 日志,同步给下游doris 集群

版本说明

服务器是jdk11,maven3

Flink1.16.2

flink-doris-connector-1.16-1.5.0-SNAPSHOT 这个在github主分支下载编译

build flink-doris-connector 是下载apache/doris-flink-connector: Flink Connector for Apache Doris (github.com) 项目主分支,用jdk11 maven3编译打包的

Oracle 12c,Oracle 11g r2也试过可以的

Doris 2.0 必须用最新版,支持新数据类型,工具兼容能使用。

部署doris集群

得有docker环境,配好国内镜像,安装了compose-compose,硬盘要快吞吐量要够,性能才好。下面是docker run脚本,测试环境可以一个fe 3个be,就是be那个脚本 改一下run 出来三个be节点

docker run -itd \
--name=fe \
--env FE_SERVERS="fe1:192.168.130.177:9010" \
--env FE_ID=1 \
-p 8030:8030 \
-p 9030:9030 \
-v /home/dockerapps/doris/fe/doris-meta:/opt/apache-doris/fe/doris-meta \
-v /home/dockerapps/doris/fe/log:/opt/apache-doris/fe/log \
--net=host \
apache/doris:2.0.0_alpha-fe-x86_64
​
​
docker run -itd \
--name=be \
--env FE_SERVERS="fe1:192.168.130.177:9010" \
--env BE_ADDR="192.168.130.177:9050" \
-p 8040:8040 \
-v /home/dockerapps/doris/be/storage:/opt/apache-doris/be/storage \
-v /home/dockerapps/doris/be/log:/opt/apache-doris/be/log \
--net=host \
apache/doris:2.0.0_alpha-be-x86_64

部署flnk集群

主要有三种方式 伪集群,standalone 和yarn方式。第三种方式还得搭hadoop集群不好推广,此处总结standalone方式。

开三到6个集群节点,域名统一互相ssh免密登陆和时间同步(略)

用清华镜像下载 https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.16.2/flink-1.16.2-bin-scala_2.12.tgz

传入master节点 解压

进入conf目录中,master 改你指定master节点的域名

Workers 添加每个集群节点的域名

flink-conf.yaml改一下

# JobManager节点地址.

jobmanager.rpc.address: 主节点域名

jobmanager.bind-host: 0.0.0.0

rest.address: 主节点域名

rest.bind-address: 0.0.0.0

# TaskManager节点地址.需要配置为当前机器名

taskmanager.bind-host: 0.0.0.0

taskmanager.host: 部署节点的域名

lib中添加额外的jar包

flink-doris-connector-1.16-1.5.0-SNAPSHOT.jar flink-shaded-force-shading-16.1.jar flink-shaded-guava-30.1.1-jre-16.1.jar flink-sql-connector-oracle-cdc-2.4.1.jar mysql-connector-java-8.0.28.jar ojdbc8-12.2.0.1.jar orai18n-12.2.0.1.jar

flink-doris-connector-1.16-1.5.0-SNAPSHOT.jar :https://github.com/apache/doris-flink-connector.git下载主分支自己个build ,改下pom 参数

1.16.2 1.16

如果你部署flink1.17 就改对应的参数然后build

flink-sql-connector-oracle-cdc-2.4.1.jar 这个是 flinkcdc的jar包可以在 下载Central Repository: (maven.org) 当然你得知道这个jar包的pom坐标,简单的你就在https://mvnrepository.com/ 搜索然后点下载jar包

最后三个是数据库jdbc驱动和语言包

flink-doris-connector一键部署工具

apache/doris-flink-connector: Flink Connector for Apache Doris (github.com)

clone 或者下载主分支,然后自己build 我用的是jdk11 maven3

flink-doris-connector-1.16-1.5.0-SNAPSHOT.jar 这个上传到flink的lib里

运行命令脚本

bin/flink run \
     -Dexecution.checkpointing.interval=10min \
     -Dexecution.checkpointing.tolerable-failed-checkpoints=100 \
     -Drestart-strategy=fixed-delay \
     -Drestart-strategy.fixed-delay.attempts=2147483647 \
     -Dexecution.checkpointing.min-pause=3000 \
     -Dparallelism.default=1 \
     -c org.apache.doris.flink.tools.cdc.CdcTools \
     ./lib/flink-doris-connector-1.16-1.5.0-SNAPSHOT.jar \
     oracle-sync-database \
     --database HISDB \
     --oracle-conf hostname=192.168.100.175 \
     --oracle-conf port=1521 \
     --oracle-conf username=hisdb \
     --oracle-conf password="hisdb" \
     --oracle-conf database-name=ORCL \
     --oracle-conf schema-name=HISDB \
     --oracle-conf debezium.database.history.store.only.captured.tables.ddl=true \
     --including-tables "PAINBILLDETAIL|DOCITEMDETAIL|CHARGEDETAIL|LABTESTDETAILDEL|IOWHDETAIL|QUERYMEDICAIO|ORDERSCOSTS|CLINICINVOICE|PRE_STOCKPILE|DOCITEMSHEET|MEDDISPENSE|LABTESTDETAIL|ORDERS|CLINICPAYMAYRECORD|CHARGESHEET|REGISTER|IOWHSHEET|CDBASICSICK|SYSTEMLOG|LABTESTSHEET|DIAGNOSIS|EXAMDETAIL|CASEPAINFEE|PAININVOICE|EXAMSHEET|EXPIOWHDETAIL" \
     --sink-conf fenodes=192.168.130.177:8030 \
     --sink-conf username=root \
     --sink-conf password=\
     --sink-conf jdbc-url=jdbc:mysql://192.168.130.177:9030 \
     --sink-conf sink.enable-2pc=false \
     --table-conf replication_num=1

--including-tables,这个部分把你要同步的表挨着摆开。

oracle-conf 是上游oracle数据库的连接信息

--sink-conf 是下游doris数据库连接信息

--sink-conf sink.enable-2pc=false 这个加了是因为你反复启动脚本,每次checkpoint 都有一个标签,你如果不false就会报错告诉你上一个同样名字的标签的错误

./lib/flink-doris-connector-1.16-1.5.0-SNAPSHOT.jar 这个就是第四部分buil的jar包的位置

-Dexecution.checkpointing.interval=1min \

-Dexecution.checkpointing.tolerable-failed-checkpoints=3 \

-Drestart-strategy=fixed-delay \

-Drestart-strategy.fixed-delay.attempts=2147483647 \

-Dexecution.checkpointing.min-pause=3000 \

这几个就是运行参数设定。

加时间戳说明

这个工具能够自动在doris一侧自动建库建表,库名和oracle数据库名一样,表名也和oracle的一样

既然自动建的,就会少一个时间戳,我是怎么加上的呢?

第一次启动,会把所有表都建好,然后你运行这个命令,挨个表都加一下:

ALTER TABLE `PAIOC` ADD COLUMN CREATEDAT DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;

所有表都加了CREATEDAT 时间戳并且缺省值取当前时间

然后你再运行脚本时,脚本发现表已经有了就不自动再建一遍了,如此就加上了时间戳。

测试部分

启动脚本后 jdbc对业务数据库连接检查,你会发现这么多表就共享一个jdbc数据库连接抽取数据,开销低。

一键实现Oracle数据整库同步至 Apache Doris的验证实录_第1张图片

部署节点就一个jdbc共享连接。

一键实现Oracle数据整库同步至 Apache Doris的验证实录_第2张图片

 

Oracle doris 上下游每张表 每个表cont 数都一致

数据实时同步,我找了条记录 修改后 几分钟后,doris一侧的数据也跟着同步过来,你删、增记录也会同步过来,这就是实时同步呦。

多张表的压力测试

开始是一个flink job 运行所有表捆在一起报资源不足的错误,后来拆开成三个flink job 每个表 25或26张表。Flink的 内存配置修改一下,内存改大些具体如下:

Conf/ flink-conf.yaml

jobmanager.memory.process.size: 2048m

taskmanager.memory.process.size: 4096m

最后

这个工具简单高效的解决批流一体同步数据到下游apache doris数仓中。大家可以参看网页练一练,并应用到项目中创造价值。

你可能感兴趣的:(oracle,数据库)