FlinkCDC同步mysql的demo

目录

一 : 什么是CDC ?使用场景是什么?

二: 目前有哪些技术

基于查询的 CDC:

基于日志的 CDC:

三- FlinkCDC采集mysql 到 mysql的demo

1- mysql必须开启binlog

 2- 创建一个用户,权限 SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT 。必须有reload

4- 引入依赖 (注意 打包成 jar的时候,不要打包进去。不然会报错)

5.1- SQL的实现方式


一 : 什么是CDC ?使用场景是什么?

CDC是(change data capture),翻译过来就是 捕获数据变更。通常数据处理上,我们说的 CDC 技术主要面向 数据库的变更,是一种用于捕获数据库中数据变更的技术。

它的使用场景(作用)主要有:

        1- 数据同步,用于备份,容灾

        2- 数据分发,一个数据源分发给多个下游

        3- 数据采集(E),面向数据仓库/数据湖的 ETL 数据集成

二: 目前有哪些技术

根据实现机制可以分为两个方向,基于查询和基于日志。

基于查询是就是select进行全表扫描过滤出变更的数据。

基于日志就是连续实时读取数据库的操作log,例如msyql的binlog

  • 基于查询的 CDC:

    • 离线调度查询作业,批处理。把一张表同步到其他系统,每次通过查询去获取表中最新的数据;

    • 无法保障数据一致性,查的过程中有可能数据已经发生了多次变更;

    • 无法保障实时性,基于离线调度存在天然的延迟。

    • 影响数据库性能

  • 基于日志的 CDC:

    • 实时消费日志,流处理,例如 MySQL 的 binlog 日志完整记录了数据库中的变更,可以把 binlog 文件当作流的数据源;
    • 保障数据一致性,因为 binlog 文件包含了所有历史变更明细;
    • 保障实时性,因为类似 binlog 的日志文件是可以流式消费的,提供的是实时数据。


    因我们的业务场景是要求近实时(分钟级),所以必须采用基于binlog的技术,canal的demo可以参考我的另外文章。又因为 初始化时需要导入全量数据(msyql到kudu),canal得依赖其他的组件,需要保证数据完整一致性(数据不丢,不重复),且对数据库影响小(锁表先导入全量数据,在进行增量)。操作起来较为麻烦,此时FlinkCDC闪亮登场( 如何全量,增量和精准一次可参考)。图片

三- FlinkCDC采集mysql 到 mysql的demo

前置条件:Mysql 必须是 5.7 或 8.0.X

1- mysql必须开启binlog

server-id         = <server-id>  # 可以自定义,但必须唯一
log_bin           = <mysql-bin>  # 可以自定义,binlog文件的前缀名
binlog_format     = ROW          # 必须是row
binlog_row_image  = FULL         # 必须是full

 2- 创建一个用户,权限 SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT 。必须有reload

GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '<flinkuser>'@'<mysqlADD>' identified by '<flinkuserPWD>';

 Flink必须是 1.12以上的,如果使用flinkCDC2.0且使用flinkSQL,必须是1.13,java 8

下载网页flink-cdc-connector(包括了 mysql postgres和mongdb)

没放入可能会包找不到的错误

org.apache.flink.table.api.ValidationException: Could not find any factory for identifier 'mysql-cdc' that implements 'org.apache.flink.table.factories.DynamicTableFactory' in the classpath.

4- 引入依赖 (注意 打包成 jar的时候,不要打包进去。不然会报错)

<dependency>
  <groupId>com.ververica</groupId>
  <artifactId>flink-connector-mysql-cdc</artifactId>
  <version>2.0.0</version>
  <scope>provided</scope> <- 编
<think>好的,我需要回答用户关于如何使用FlinkCDC减少MySQL压力的优化策略和最佳实践。首先,我应该回忆一下FlinkCDC的基本原理,它是如何工作的,以及常见的优化方法有哪些。 FlinkCDC通过捕获MySQL的binlog来实现数据同步,这样可以避免全表扫描,减少对源数据库的压力。用户可能想知道具体的配置和策略,比如调整读取频率、使用并行读取,或者结合其他组件进行数据分流。 接下来,我需要考虑如何结构化回答。可能分成几个部分,比如优化读取配置、降低写入压力、资源管理、架构设计等。每个部分需要具体的方法,例如设置合适的scan.incremental.snapshot.chunk.size参数,或者使用旁路缓存减少直接查询MySQL的次数。 同时,用户提到的引用内容中有提到StarRocks替换多数据库的情况,可能可以引用这部分作为优化架构的例子,说明如何通过物化视图或数据分层来减轻MySQL负担。另外,引用中提到的RichSinkFunction的SQL语句可能涉及批量写入或upsert操作,这也是减少数据库压力的方法之一。 需要确保回答中提到的每个策略都有实际的操作步骤或配置示例,比如给出FlinkSQL的配置代码片段,或者解释如何设置检查点间隔。同时,要注意使用中文,并正确应用LaTeX格式,比如变量用$符号包裹,独立公式用$$。 可能还需要生成相关问题,比如如何监控FlinkCDCMySQL的影响,或者与其他CDC工具的比较。这些问题应该与主题相关,帮助用户进一步探索。 最后,要检查引用标记是否正确,确保引用的内容来自用户提供的参考,比如引用[^1]和[^2]。确保所有技术术语准确,建议的最佳实践符合FlinkMySQL的官方推荐。</think>### 如何使用 FlinkCDC 减小 MySQL 的压力:优化策略与实践 #### 1. **优化 FlinkCDC 数据捕获配置** - **调整增量快照读取策略** 通过设置合理的 `scan.incremental.snapshot.chunk.size` 参数(如 `1024`),控制每次从 MySQL 读取的数据块大小,避免单次查询负载过高[^1]。 示例配置: ```sql CREATE TABLE mysql_source ( ... ) WITH ( 'scan.incremental.snapshot.chunk.size' = '1024', ... ); ``` - **降低读取频率** 使用 `debezium.snapshot.delay.ms` 控制快照启动延迟,或通过 `server-id` 分配策略分散多个 FlinkCDC 任务的读取压力。 #### 2. **降低 MySQL 写入压力** - **批量写入与 Upsert 优化** 在 Sink 端(如 StarRocks 或 MySQL)使用批量写入和 `ON DUPLICATE KEY UPDATE` 语法[^1],减少写入次数。例如: ```sql INSERT INTO t_activities_count VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE count = count + ?; ``` - **异步写入与缓存层** 通过旁路缓存(如 Redis)暂存高频查询数据,减少对 MySQL 的直接访问[^2]。 #### 3. **资源隔离与动态扩缩容** - **独立 MySQL 从库** 为 FlinkCDC 分配专用的只读从库,隔离生产库的查询压力。 - **动态调整并行度** 根据数据量调整 Flink 任务的 `parallelism`,避免资源争抢。 #### 4. **架构优化与数据分层** - **使用 StarRocks 替代多级存储** 如引用[^2]所述,将明细数据写入 StarRocks,利用其物化视图和高效查询能力,减少对 MySQL 的复杂聚合操作依赖。 - **数据冷热分离** 将历史数据归档至低成本存储(如 HDFS),仅保留热数据在 MySQL。 #### 5. **监控与调优工具** - **启用 Flink 检查点(Checkpoint)** 设置合理的检查点间隔(如 `10分钟`),平衡容错与性能: ```java env.enableCheckpointing(600000); // 单位:毫秒 ``` - **监控 MySQL 性能指标** 关注 `Threads_running`、`Queries_per_second` 等指标,动态调整 FlinkCDC 配置。 --- ###
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值