【Apache Doris】一键实现万表MySQL整库同步 | 快速体验

【Apache Doris】一键实现万表MySQL整库同步 | 快速体验)

  • [一、 环境信息](#一、 环境信息)
    • [1.1 硬件信息](#1.1 硬件信息)
    • [1.2 软件信息](#1.2 软件信息)
  • [二、 流程介绍](#二、 流程介绍)
  • [三、 前提概要](#三、 前提概要)
    • [3.1 安装部署](#3.1 安装部署)
    • [3.2 JAR包准备](#3.2 JAR包准备)
      • [3.2.1 数据源](#3.2.1 数据源)
      • [3.2.2 目标源](#3.2.2 目标源)
    • [3.3 脚本模版](#3.3 脚本模版)
  • 四、快速体验
  • 五、常见问题
    • [5.1 Mysql通信异常](#5.1 Mysql通信异常)
    • [5.2 MySQL无Key同步异常](#5.2 MySQL无Key同步异常)
    • [5.3 CKP ON HDFS连接异常](#5.3 CKP ON HDFS连接异常)
    • [5.4 CKP ON HDFS权限异常](#5.4 CKP ON HDFS权限异常)
    • [5.5 其它参考官方【Flink Doris Connector】QA](#5.5 其它参考官方【Flink Doris Connector】QA)

一、 环境信息

1.1 硬件信息

  1. CPU :48C
  2. CPU型号:x86_64
  3. 内存 :185GB

1.2 软件信息

  1. 系统 :CentOS
  2. Apahce Doris版本 :2.0.2
  3. Mysql版本:5.7.36
  4. Flink版本:1.17.1
  5. Flink-Doris-Connector版本:1.5

二、 流程介绍

Mysql万表同步至Doris,主要是通过Flink计算引擎、基于Doris社区研发的Flink Doris Connector 实现的。无需提前建表,当Flink任务启动后,Flink Doris Connector 会自动识别对应的Doris表是否存在,不存在则自动创建Doris表 ,如果存在则直接启动同步任务。

三、 前提概要

3.1 安装部署

Doris/Flink/Mysql的安装部署流程可以根据版本自行Google。

  1. Doris下载地址:Doris下载地址
  2. Flink下载地址:Flink下载地址
  3. MySQL包下载地址:MySQL包下载地址

3.2 JAR包准备

3.2.1 数据源

Flink源端读取MySQL数据的连接器,可通过该地址下载flink-sql-connector-mysql-cdc-2.4.1.jar:
mysql-cdc-2.4.1下载地址

3.2.2 目标源

Flink目标端写Doris的Flink Doris Connector ,可通过该地址获取:
flink-doris-connector下载地址

3.3 脚本模版

shell 复制代码
./bin/flink run \
    -Dexecution.checkpointing.interval=10s \
    -Dparallelism.default=1 \
    -c org.apache.doris.flink.tools.cdc.CdcTools \
    lib/flink-doris-connector-1.17-1.5.0-SNAPSHOT.jar \
    mysql-sync-database \
    --database doris_db \
    --mysql-conf hostname= 127.0.0.1 \
    --mysql-conf port= 3306 \
    --mysql-conf username= root \
    --mysql-conf password= root \
    --mysql-conf database-name= mysql_db \
    --mysql-conf scan.startup.mode=initial \
    --including-tables "test.*" \
    --sink-conf fenodes= 127.0.0.1:8030 \
    --sink-conf username=root \
    --sink-conf password=root \
    --sink-conf jdbc-url=jdbc:mysql://127.0.0.1:9030 \
    --sink-conf sink.label-prefix=label \
    --table-conf replication_num=1 \
  • --job-name Flink任务名称, 非必需。
  • -Dexecution.checkpointing.interval checkpoint时间间隔,实际task中是需要checkpoint后才执行数据写入
  • --database 同步到Doris的数据库名。
  • --mysql-conf MySQL CDCSource 配置,例如--mysql-conf hostname=127.0.0.1 ,可以在这里查看 所有配置MySQL-CDC,其中hostname/username/password/database-name 是必需的。
  • --including-tables 需要同步的MySQL表,可以使用"|" 分隔多个表,并支持正则表达式。 比如--including-tables "test.*" 就是同步所有以test开头的表。
  • --sink-conf Doris Sink 的所有配置,可以在这里查看完整的配置项
  • --table-conf Doris表的配置项,即properties中包含的内容。 例如 --table-conf replication_num=1

四、快速体验

例如单表同步MySQL中Star Schema Benchmark的part零件信息表,共1600000条记录。

shell 复制代码
./bin/flink run \
    -Dexecution.checkpointing.interval=10s \
    -Dparallelism.default=1 \
    -c org.apache.doris.flink.tools.cdc.CdcTools \
    lib/flink-doris-connector-1.17-1.5.0-SNAPSHOT.jar \
    mysql-sync-database \
    --database ssb_test \
    --mysql-conf hostname=172.21.16.12 \
    --mysql-conf port=23306 \
    --mysql-conf username=root \
    --mysql-conf password=123456 \
    --mysql-conf database-name=ssb_test \
    --mysql-conf scan.startup.mode=initial \
    --mysql-conf scan.incremental.snapshot.chunk.key-column=ssb_test.part:p_partkey \
    --including-tables "part" \
    --sink-conf fenodes=10.16.10.6:8032 \
    --sink-conf username=root \
    --sink-conf password=root \
    --sink-conf jdbc-url=jdbc:mysql://10.16.10.6:9034 \
    --sink-conf sink.label-prefix=label05 \
    --table-conf replication_num=1 \

在FLINK_HOME执行上述命令后,WEB UI中会新增相应Job。

查看taskmanager日志可以发现,task会先对mysql主键做切分,然后再根据ckp的时间间隔按批写入Commit(默认2pc提交)。

默认环境10秒ckp下,单并发写入只需3min左右即可同步完160W数据,且单副本数据压缩率达到90% !!!

五、常见问题

5.1 Mysql通信异常

不用单独加mysql驱动包;这个问题可能是因为mysql信息填写错误驱动包不兼容 导致。

5.2 MySQL无Key同步异常

mysql源表没有设置主键,可以在脚本中指定--mysql-conf scan.incremental.snapshot.chunk.key-column=database.table:column,database.table1.column... 解决。

5.3 CKP ON HDFS连接异常

使用hadoop作为checkpoint时报如下异常:

shell 复制代码
Caused by: java.net.ConnectException: Call From hadoop1/ip to hadoop1:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

这类异常一般是由于网络原因端口配置错误导致,可以先进行telnet ip port看是否通,再进行调整处理。

5.4 CKP ON HDFS权限异常

使用默认root跑脚本时,如果出现如下异常:

shell 复制代码
Caused by: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="/":hadoop:supergroup:drwxr-xr-x

这类异常一般切换至对应用户 或者授权即可,这个case可以切换至hadoop用户起 或 将root用户加到hdfs用户组中即可。

【Apache Doris】一键实现万表MySQL整库同步 | 快速体验 分享至此结束,体验过程中若遇到问题欢迎留言交流

相关推荐
zmd-zk10 分钟前
kafka+zookeeper的搭建
大数据·分布式·zookeeper·中间件·kafka
激流丶12 分钟前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
测试界的酸菜鱼28 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
时差95330 分钟前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式32 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
Mephisto.java32 分钟前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
Mephisto.java38 分钟前
【大数据学习 | kafka高级部分】kafka的优化参数整理
大数据·sql·oracle·kafka·json·database
道可云40 分钟前
道可云人工智能&元宇宙每日资讯|2024国际虚拟现实创新大会将在青岛举办
大数据·人工智能·3d·机器人·ar·vr
成都古河云1 小时前
智慧场馆:安全、节能与智能化管理的未来
大数据·运维·人工智能·安全·智慧城市
软工菜鸡1 小时前
预训练语言模型BERT——PaddleNLP中的预训练模型
大数据·人工智能·深度学习·算法·语言模型·自然语言处理·bert