数据CDC通常指的是“数据变更捕获”(Change Data Capture,简称CDC)。这是一个用于捕获和跟踪数据库中数据变化的技术或方法。CDC可以实时或近实时地捕获插入、更新和删除操作,并将这些变化记录下来,以便在数据仓库、数据湖或其他数据存储系统中进行同步。
CDC技术在数据集成、数据复制、数据同步和数据分析等场景中非常有用。它可以帮助企业保持数据的一致性和完整性,减少数据延迟,并提高数据处理的效率。
常见的CDC实现方式包括:
不同的数据库和数据集成工具可能会提供不同的CDC实现方式和支持。
官方列出的工具:https://docs.starrocks.io/zh/docs/loading/loading_tools/
参考: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创建表
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创建外表,该表不支持修改。
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中查询
SELECT * FROM test_cdc_db.mysql_external_table_users;
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/
# 安装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
################################################################################
# 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
server-id
范围。这是因为 CDC 工具可能会启动多个并行任务,每个任务都需要一个唯一的 server-id
。通过配置一个范围,CDC 工具可以在这个范围内动态分配 server-id
,确保每个任务都有一个唯一的标识。server-id
被设置为 5400-5404
,这意味着 CDC 工具可以在这个范围内分配 server-id
。例如,如果有 5 个并行任务,它们的 server-id
可以分别是 5400、5401、5402、5403 和 5404。其它配置参考
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),从而满足业务需求。
https://github.com/debezium/debezium/blob/main/README_ZH.md
https://debezium.io/documentation/reference/3.0/tutorial.html
商业版,免费版只能使用92天。
安装文档:https://www.clougence.com/cc-doc/productOP/docker/install_linux_macos
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
https://maxwells-daemon.io/
https://blog.csdn.net/sinat_35773915/article/details/132204873
https://github.com/alibaba/DataX
阿里开源的项目,商业版的支持实时同步。
CREATE
、ALTER
、DROP
和 TRUNCATE
操作。SELECT
、INSERT
、UPDATE
和 DELETE
操作。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。