前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >外部数据同步(CDC)到StarRocks

外部数据同步(CDC)到StarRocks

原创
作者头像
码之有理
发布2025-02-06 17:05:31
发布2025-02-06 17:05:31
9110
代码可运行
举报
运行总次数:0
代码可运行

数据CDC通常指的是“数据变更捕获”(Change Data Capture,简称CDC)。这是一个用于捕获和跟踪数据库中数据变化的技术或方法。CDC可以实时或近实时地捕获插入、更新和删除操作,并将这些变化记录下来,以便在数据仓库、数据湖或其他数据存储系统中进行同步。

CDC技术在数据集成、数据复制、数据同步和数据分析等场景中非常有用。它可以帮助企业保持数据的一致性和完整性,减少数据延迟,并提高数据处理的效率。

常见的CDC实现方式包括:

  1. 触发器(Triggers):在数据库中设置触发器,当数据发生变化时,触发器会自动记录这些变化。
  2. 日志挖掘(Log Mining):通过读取数据库的事务日志来捕获数据变化。
  3. 时间戳(Timestamps):使用时间戳字段来标记数据的最后修改时间,并根据时间戳来捕获变化。
  4. 增量提取(Incremental Extraction):定期扫描数据表,提取自上次扫描以来发生变化的数据。

不同的数据库和数据集成工具可能会提供不同的CDC实现方式和支持。

官方列出的工具:https://docs.starrocks.io/zh/docs/loading/loading_tools/

实时

StarRocks外表

参考:https://juejin.cn/post/7325495640054235162

StarRocks 支持以外部表 (External Table) 的形式,接入其他数据源。外部表指的是保存在其他数据源中的数据表,而 StartRocks 只保存表对应的元数据,并直接向外部表所在数据源发起查询。目前 StarRocks 已支持的第三方数据源包括 MySQL、StarRocks、Elasticsearch、Apache Hive™、Apache Iceberg 和 Apache Hudi。对于 StarRocks 数据源,现阶段只支持 Insert 写入,不支持读取,对于其他数据源,现阶段只支持读取,还不支持写入。 星型模型中,数据一般划分为维度表 (dimension table) 和事实表 (fact table)。维度表数据量少,但会涉及 UPDATE 操作。目前 StarRocks 中还不直接支持 UPDATE 操作(可以通过 Unique/Primary 数据模型实现),在一些场景下,可以把维度表存储在 MySQL 中,查询时直接读取维度表。 在使用 MySQL 的数据之前,需在 StarRocks 创建外部表 (CREATE EXTERNAL TABLE),与之相映射。StarRocks 中创建 MySQL 外部表时需要指定 MySQL 的相关连接信息,如下所示。

注意:MySQL中的DDL语句如修改列,不会同步到StarRocks。

MySQL创建表

代码语言:javascript
代码运行次数:0
复制
CREATE TABLE `users` (
  `id` int NOT NULL,
  `name` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SELECT * FROM test_cdc_db.users;

StarRocks创建外表,该表不支持修改。

代码语言:javascript
代码运行次数:0
复制
CREATE EXTERNAL TABLE mysql_external_table_users
(
  `id` bigint  NOT NULL AUTO_INCREMENT ,
  `name` varchar(45) NOT NULL
)
ENGINE=mysql
PROPERTIES
(
 "host" = "9.135.127.159",
 "port" = "3306",
 "user" = "root",
 "password" = "ZWkcP*5793dYRj",
 "database" = "test_cdc_db",
 "table" = "users"
);

在StarRocks中查询

代码语言:javascript
代码运行次数:0
复制
SELECT * FROM test_cdc_db.mysql_external_table_users;

Flink CDC

Flink CDC官方文档(以下实验基于该文档):https://nightlies.apache.org/flink/flink-cdc-docs-release-3.0/zh/docs/get-started/quickstart/mysql-to-starrocks/

StarRocks官方文档:https://docs.starrocks.io/zh/docs/loading/Flink_cdc_load/,该文档还基于StarRocks的SMT工具,原理都是一样,只是手动的地方更多,可以控制的细节更多。

注意:MySQL中的DDL语句如修改列,会同步到StarRocks。

推荐使用 Flink 1.14 及以上版本,最低支持 1.11 版本。

Flink CDC Connectors 与 Flink ®的版本对应关系:

Flink CDC版本_ Flink 版本_

1.0.0 1.11.*

1.1.0 1.11.*

1.2.0 1.12.*

1.3.0 1.12.*

1.4.0 1.13.*

2.0.* 1.13.*

2.1.* 1.13.*

2.2.* 1.13.、1.14.

2.3.* 1.13.*、1.14.*、1.15.*、1.16.0

2.4.* 1.13.*、1.14*、1.15.*、1.16.*、1.17.0

Flink版本:https://archive.apache.org/dist/flink/

代码语言:javascript
代码运行次数:0
复制
# 安装Java
# https://www.oracle.com/java/technologies/downloads/?er=221886

SHOW VARIABLES LIKE '%time_zone%';
SHOW VARIABLES LIKE 'log_bin';
SHOW VARIABLES LIKE 'binlog_format';
SHOW VARIABLES LIKE 'binlog_row_image';

wget https://archive.apache.org/dist/flink/flink-1.18.0/flink-1.18.0-bin-scala_2.12.tgz
tar -xf flink-1.18.0-bin-scala_2.12.tgz
cd flink-1.18.0
./bin/start-cluster.sh
export FLINK_HOME=/data2/lab/Flink/flink-1.18.0


wget https://github.com/ververica/flink-cdc-connectors/releases/download/release-3.0.0/flink-cdc-3.0.0-bin.tar.gz
tar -xf flink-cdc-3.0.0-bin.tar.gz
cd 
wget https://repo1.maven.org/maven2/com/ververica/flink-cdc-pipeline-connector-mysql/3.0.0/flink-cdc-pipeline-connector-mysql-3.0.0.jar
bash bin/flink-cdc.sh mysql-to-starrocks.yaml

配置文件mysql-to-starrocks.yaml

代码语言:javascript
代码运行次数:0
复制
################################################################################
# Description: Sync MySQL all tables to StarRocks
################################################################################
source:
  type: mysql
  hostname: 9.135.x.x
  port: 3306
  username: root
  password: xxx
  tables: test_cdc_db.\.*
  server-id: 5400-5404
  connectionTimeZone: UTC

sink:
  type: starrocks
  name: StarRocks Sink
  jdbc-url: jdbc:mysql://127.0.0.1:9030
  load-url: 127.0.0.1:8030
  username: root
  password: ""
  table.create.properties.replication_num: 1

pipeline:
  name: Sync MySQL Database to StarRocks
  parallelism: 1
  • connectionTimeZone:和MySQL中的时区保持一致。
  • server-id: 在某些情况下,特别是使用 Flink CDC 或其他 CDC 工具时,可能需要配置一个 server-id 范围。这是因为 CDC 工具可能会启动多个并行任务,每个任务都需要一个唯一的 server-id。通过配置一个范围,CDC 工具可以在这个范围内动态分配 server-id,确保每个任务都有一个唯一的标识。server-id 被设置为 5400-5404,这意味着 CDC 工具可以在这个范围内分配 server-id。例如,如果有 5 个并行任务,它们的 server-id 可以分别是 5400、5401、5402、5403 和 5404。

其它配置参考

代码语言:javascript
代码运行次数:0
复制
source:
  type: mysql
  hostname: localhost
  port: 3306
  username: root
  password: 123456
  database-name: app_db
  table-name: orders,customers
  server-id: 5400-5404
  connectionTimeZone: UTC

sink:
  type: starrocks
  jdbc-url: jdbc:mysql://127.0.0.1:9030
  load-url: 127.0.0.1:8030
  database: "your_database"
  table: "your_table"
  # table-name: orders.*,customers
  username: "your_username"
  password: "your_password"
  sink.properties:
    format: "json"
    strip_outer_array: "true"
    jsonpaths: "[\"$.id\", \"$.name\", \"$.age\"]"

通过正确配置 sink.properties,可以确保数据以期望的格式和方式写入目标系统(例如 StarRocks),从而满足业务需求。

Debezium

https://github.com/debezium/debezium/blob/main/README_ZH.md

https://debezium.io/documentation/reference/3.0/tutorial.html

ClouCanal

商业版,免费版只能使用92天。

安装文档:https://www.clougence.com/cc-doc/productOP/docker/install_linux_macos

代码语言:javascript
代码运行次数:0
复制
wget -cO cloudcanal.7z 'https://tgzdownload.clougence.com/4.4.1.0/cloudcanal.7z?Expires=1730868218&OSSAccessKeyId=LTAI4G5wdUHmu9t19fVLkC2w&Signature=8CwO%2BA0%2FO2OQ3MdrksKSZPkXu5g%3D'

yum install -y p7zip p7zip-plugins 
yum install -y docker-compose
7z x cloudcanal.7z -o./cloudcanal_home
cd cloudcanal_home/install_on_docker
sh install.sh 

Maxwell

https://maxwells-daemon.io/

https://blog.csdn.net/sinat_35773915/article/details/132204873

离线

DataX

https://github.com/alibaba/DataX

阿里开源的项目,商业版的支持实时同步。

参考

  • DDL(数据定义语言):主要用于定义和管理数据库结构,包括 CREATEALTERDROPTRUNCATE 操作。
  • DML(数据操作语言):主要用于操作数据库中的数据,包括 SELECTINSERTUPDATEDELETE 操作。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实时
    • StarRocks外表
    • Flink CDC
    • Debezium
    • ClouCanal
    • Maxwell
  • 离线
    • DataX
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档