使用Apache Doris自动同步整个 MySQL/Oracle 数据库进行数据分析

Flink-Doris-Connector 1.4.0 允许用户一步将包含数千个表的整个数据库(MySQL或Oracle )摄取到Apache Doris(一种实时分析数据库)中。

通过内置的Flink CDC,连接器可以直接将上游源的表模式和数据同步到Apache Doris,这意味着用户不再需要编写DataStream程序或在Doris中预先创建映射表。

当 Flink 作业启动时,Connector 会自动检查源数据库和 Apache Doris 之间的数据等效性。如果数据源包含 Doris 中不存在的表,Connector 会自动在 Doris 中创建相同的表,并利用 Flink 的侧输出来方便一次摄取多个表;如果源中发生架构更改,它将自动获取 DDL 语句并在 Doris 中进行相同的架构更改。
 

一、快速开始

  • 对于MySQL:

下载 JAR 文件:https://github.com/apache/doris-flink-connector/releases/tag/1.4.0


行家:

<dependency><groupId>org.apache.doris</groupId><artifactId>flink-doris-connector-1.15</artifactId><!--artifactId>flink-doris-connector-1.16</artifactId--><!--artifactId>flink-doris-connector-1.17</artifactId--><version>1.4.0</version>
</dependency>
  • 对于Oracle:

下载 JAR 文件:
Flink 1.15:http://justtmp-bj-1308700295.cos.ap-beijing.myqcloud.com/oracle/flink-doris-connector-1.15-1.5.0-SNAPSHOT.jar
Flink 1.16:http://justtmp-bj-1308700295.cos.ap-beijing.myqcloud.com/oracle/flink-doris-connector-1.16-1.5.0-SNAPSHOT.jar
Flink 1.17:http://justtmp-bj-1308700295.cos.ap-beijing.myqcloud.com/oracle/flink-doris-connector-1.17-1.5.0-SNAPSHOT.jar


如何使用它

例如,要将整个 MySQL 数据库引入mysql_dbDoris(MySQL 表名以tbl或test开头),只需执行以下命令(无需提前在Doris 中创建表):

<FLINK_HOME>/bin/flink run \-Dexecution.checkpointing.interval=10s \-Dparallelism.default=1 \-c org.apache.doris.flink.tools.cdc.CdcTools \lib/flink-doris-connector-1.16-1.4.0.jar \mysql-sync-database \--database test_db \--mysql-conf hostname=127.0.0.1 \--mysql-conf username=root \--mysql-conf password=123456 \--mysql-conf database-name=mysql_db \--including-tables "tbl|test.*" \--sink-conf fenodes=127.0.0.1:8030 \--sink-conf username=root \--sink-conf password=123456 \--sink-conf jdbc-url=jdbc:mysql://127.0.0.1:9030 \--sink-conf sink.label-prefix=label1 \--table-conf replication_num=1

摄取Oracle数据库:请参考示例代码(https://github.com/apache/doris-flink-connector/pull/156)。


表现如何

当涉及到同步整个数据库(包含数百甚至数千个活动或不活动的表)时,大多数用户希望在几秒钟内完成。因此我们测试了连接器,看看它是否符合要求:

  • 1000 个 MySQL 表,每个表有 100 个字段。所有表都是活动的(这意味着它们不断更新,每次数据写入涉及一百多行)

  • Flink作业检查点:10s

经过压力测试,系统表现出较高的稳定性,主要指标如下:

根据早期采用者的反馈,该Connector在生产环境中的万表数据库同步中也提供了高性能和系统稳定性。这证明Apache Doris和Flink CDC的结合能够高效可靠地进行大规模数据同步。

二、它如何使数据工程师受益

工程师不再需要担心表创建或表模式维护,从而节省了数天繁琐且容易出错的工作。之前在Flink CDC中,需要为每个表创建一个Flink作业,并在源端建立日志解析链路,但现在通过全库摄取,源数据库的资源消耗大大减少。也是增量更新和全量更新的统一解决方案。

其他特性

1、连接维度表和事实表

常见的做法是将维度表放在Doris中,通过Flink的实时流进行Join查询。Flink-Doris-Connector 1.4.0基于Flink 的 Async I/O实现了异步 Lookup Join,因此 Flink 实时流不会因为查询而阻塞。此外,连接器还允许您将多个查询合并为一个大查询,并将其立即发送给 Doris 进行处理。这提高了此类连接查询的效率和吞吐量。

2、节俭 SDK

我们在 Connector 中引入了 Thrift-Service SDK,用户不再需要使用 Thrift 插件或在编译时配置 Thrift 环境。这使得编译过程变得更加简单。

3、按需流加载

数据同步过程中,当没有新的数据摄入时,不会发出Stream Load请求。这样可以避免不必要的集群资源消耗。

4、后端节点轮询

对于数据摄取,Doris 调用前端节点获取后端节点列表,并随机选择一个发起摄取请求。该后端节点将是协调器。Flink-Doris-Connector 1.4.0 允许用户启用轮询机制,即在每个Flink 检查点都有不同的后端节点作为 Coordinator,以避免单个后端节点长期承受过大的压力。

5、支持更多数据类型

除了常见的数据类型外,Flink-Doris-Connector 1.4.0 还支持 Doris 中的 DecimalV3/DateV2/DateTimev2/Array/JSON。


三、用法示例

可以通过DataStream或FlinkSQL(有界流)从Doris读取数据。支持谓词下推。

CREATE TABLE flink_doris_source (name STRING,age INT,score DECIMAL(5,2)) WITH ('connector' = 'doris','fenodes' = '127.0.0.1:8030','table.identifier' = 'database.table','username' = 'root','password' = 'password','doris.filter.query' = 'age=18'
);
​
SELECT * FROM flink_doris_source;


连接维度表和事实表:

CREATE TABLE fact_table (`id` BIGINT,`name` STRING,`city` STRING,`process_time` as proctime()
) WITH ('connector' = 'kafka',
...
);
​
create table dim_city(`city` STRING,`level` INT ,`province` STRING,`country` STRING
) WITH ('connector' = 'doris','fenodes' = '127.0.0.1:8030','jdbc-url' = 'jdbc:mysql://127.0.0.1:9030','lookup.jdbc.async' = 'true','table.identifier' = 'dim.dim_city','username' = 'root','password' = ''
);
​
SELECT a.id, a.name, a.city, c.province, c.country,c.level 
FROM fact_table a
LEFT JOIN dim_city FOR SYSTEM_TIME AS OF a.process_time AS c
ON a.city = c.city


写入Apache Doris:

CREATE TABLE doris_sink (name STRING,age INT,score DECIMAL(5,2)) WITH ('connector' = 'doris','fenodes' = '127.0.0.1:8030','table.identifier' = 'database.table','username' = 'root','password' = '','sink.label-prefix' = 'doris_label',//json write in'sink.properties.format' = 'json','sink.properties.read_json_by_line' = 'true'
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/100946.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用SSH克隆GitHub项目

诸神缄默不语-个人CSDN博文目录 使用场景&#xff1a;由于不可知的网络问题&#xff0c;无法用HTTPS克隆GitHub项目。 报错fatal: unable to access https://github.com/PolarisRisingWar/llm-throught-ages.git/: GnuTLS recv error (-110): The TLS connection was non-pro…

Scrum认证高级Scrum Master (A-CSM) 认证培训课程

课程简介 高级ScrumMaster (Advanced Certified ScrumMaster, A-CSM) 认证课程是国际Scrum联盟推出的进阶级Scrum认证课程&#xff0c;是Scrum Master通往专业级敏捷教练必经的学习路径。 在ScrumMaster&#xff08;CSM&#xff09;认证课程中&#xff0c;您学习到了Scrum的价…

Navicat 携手华为云 GaussDB,联合打造便捷高效的数据库开发和建模工具方案

近日&#xff0c; Navicat Premium 顺利完成与华为云 GaussDB的兼容性测试认证&#xff0c;并获得华为云授予的技术认证书。 ​ 合作 Navicat 作为华为云 GaussDB 生态工具合作伙伴以及 Gocloud 合作伙伴&#xff0c;此次合作旨在通过Navicat 多年来在数据库开发管理工具上的积…

C++(Liunx) 使用cut截 取出Ubuntu用户的家目录,要求:不能使用“:“作为分割.

使用cut截 取出Ubuntu用户的家目录&#xff0c;要求&#xff1a;不能使用":"作为分割

Apache Doris 2.0 如何实现导入性能提升 2-8 倍

数据导入吞吐是 OLAP 系统性能的重要衡量标准之一&#xff0c;高效的数据导入能力能够加速数据实时处理和分析的效率。随着 Apache Doris 用户规模的不断扩大&#xff0c; 越来越多用户对数据导入提出更高的要求&#xff0c;这也为 Apache Doris 的数据导入能力带来了更大的挑战…

关闭vscode检查更新

要关闭 Visual Studio Code 的自动检查更新功能&#xff0c;请按照以下步骤进行操作&#xff1a; 打开 Visual Studio Code。点击左侧的扩展图标&#xff08;四个方块组成的图标&#xff09;。在扩展面板中&#xff0c;点击右上角的齿轮图标&#xff0c;选择 “扩展设置”。在…

《C++设计模式》——创建型

前言 创建型为了创建东西才是有用的&#xff0c;创建型设计模式使用的场景&#xff1a; 1、创建一个东西&#xff1b; 2、可重复利用&#xff1b; 3、灵活性高&#xff0c;代码可因地制宜。 Factory Method(工厂模式) 简单工厂模式 主要用于创建对象。新添加类时&#xff0…

二叉树的递归遍历和非递归遍历

目录 一.二叉树的递归遍历 1.先序遍历二叉树 2.中序遍历二叉树 3.后序遍历二叉树 二.非递归遍历(栈) 1.先序遍历 2.中序遍历 3.后序遍历 一.二叉树的递归遍历 定义二叉树 #其中TElemType可以是int或者是char,根据要求自定 typedef struct BiNode{TElemType data;stru…

Linux系统之mkdir与rmdir命令的基本使用

Linux系统之mkdir与rmdir命令的基本使用 一、mkdir命令介绍1.1 mkdir命令简介1.2 mkdir命令的由来 二、mkdir命令的使用帮助2.1 mkdir命令的help帮助信息2.2 mkdir命令的选项解释 三、mkdir命令的基本使用3.1 查看mkdir的版本3.2 创建一个新目录3.3 创建目录时设置目录权限3.4 …

使用git把本地项目关联远程代码仓库,并推送到远程仓库

你在本地新建了一个项目&#xff0c;写好了代码&#xff0c;但是没有关联远程仓库&#xff0c;怎么关联并上传呢&#xff1f; 你要先去gitee创建一个代码仓库&#xff0c;然后复制http地址。 首次提交项目代码到一个新建的远程仓库&#xff1a; 方式一(推荐)&#xff1a; 1…

postgresql-多表连接

postgresql-多表连接 内连接查询左外连接查询右外连接查询全外连接查询交叉连接查询简写 总结 内连接查询 内连接用于返回两个表中匹配的数据行&#xff0c;使用关键字INNER JOIN表示&#xff0c;也可以简写成JOIN&#xff1b; selecte.first_name ,d.department_id fromcps…

openWRT SFTP 远程文件传输

文章目录 前言 1. openssh-sftp-server 安装2. 安装cpolar工具3.配置SFTP远程访问4.固定远程连接地址 前言 本次教程我们将在OpenWRT上安装SFTP服务&#xff0c;并结合cpolar内网穿透&#xff0c;创建安全隧道映射22端口&#xff0c;实现在公网环境下远程OpenWRT SFTP&#xf…