Flink CDC 生产环境常用参数总结

news/2024/12/25 0:40:19/

Flink CDC 生产环境常用参数总结

1.参数

1. 基本连接参数

这些参数用于定义如何连接到数据库,是配置的必需项。

参数名称说明示例
connector数据库连接器类型,常用 mysql-cdc'connector' = 'mysql-cdc'
hostname数据库主机名或 IP 地址。'hostname' = '192.168.1.100'
port数据库端口号,MySQL 通常为 3306'port' = '3306'
username用于连接数据库的用户名。'username' = 'root'
password数据库用户的密码。'password' = 'your-password'
database-name需要监控的数据库名称,支持正则表达式。'database-name' = 'production_db'
table-name需要监控的表名称,支持正则表达式。'table-name' = 'user.*'

2. 数据读取控制参数

这些参数用于控制数据从数据库的读取行为,确保 Flink CDC 的运行效率和行为符合预期。

参数名称说明示例
scan.startup.mode定义 Flink 应从哪里开始读取:'scan.startup.mode' = 'initial'
- initial:从表头读取,包括快照 + 增量数据。
- latest-offset:从最新的增量变更开始读取,跳过快照。
- specific-offset:从指定 binlog 位置开始读取。
- timestamp:从指定的时间戳(毫秒)开始读取。
debezium.snapshot.mode定义如何执行初始快照:'debezium.snapshot.mode' = 'initial'
- initial:读取历史快照 + 实时变更数据。
- never:只读取增量数据(需要确保表的历史快照无关紧要)。
scan.incremental.snapshot.enabled是否启用增量快照模式(适用于大表的分片读取以减少对源库压力)。'scan.incremental.snapshot.enabled' = 'true'
chunk.size增量快照时的分片大小(默认 1024 行)。适合大表场景调整该值,确保分片大小适中。'chunk.size' = '1000'

3. 数据库配置相关参数

这些参数主要用于适配数据库的配置,比如时区、并行度等。

参数名称说明示例
server-time-zone数据库服务器的时区,用于解析时间字段。'server-time-zone' = 'Asia/Shanghai'
heartbeat.interval心跳信号间隔(毫秒)。用于检测 CDC 连接的可用性和活跃状态。'heartbeat.interval' = '5000'
database.history数据库变更历史记录的存储方式,常用 memory'debezium.database.history' = 'memory'

4. 数据格式参数

用于定义输出数据的格式,生产环境中常用 JSON 格式(debezium-jsoncanal-json),方便和下游系统对接。

参数名称说明示例
format定义数据的序列化格式,常用 debezium-jsoncanal-json'format' = 'debezium-json'
debezium.include.schema.changes是否包含 DDL 信息。对于需要捕获表结构变更的场景,设置为 true'debezium.include.schema.changes' = 'false'

5. 容错与性能优化参数

这些参数用于优化数据处理的性能,减少对生产数据库的影响。

参数名称说明示例
scan.incremental.snapshot.chunk.key-columns分片的键列(如主键或唯一索引列)。适用于增量快照优化,确保分片能均匀分布。'scan.incremental.snapshot.chunk.key-columns' = 'id'
parallelism定义并行度,适用于高并发数据流场景。'parallelism' = '4'
debezium.snapshot.locking.mode定义快照时的表锁行为:'debezium.snapshot.locking.mode' = 'none'
- none:无锁读取(推荐,前提是数据库支持一致性读取)。
- exclusive:对表进行排他锁操作(避免数据变更造成不一致)。

6. 示例生产环境配置

以下是一个生产环境中常见的 Flink CDC 表配置示例:

CREATE TABLE mysql_cdc_table (id INT NOT NULL,name STRING,age INT,PRIMARY KEY (id) NOT ENFORCED
) WITH ('connector' = 'mysql-cdc','hostname' = '192.168.1.100','port' = '3306','username' = 'cdc_user','password' = 'your-password','database-name' = 'production_db','table-name' = 'user','scan.startup.mode' = 'initial','debezium.snapshot.mode' = 'initial','scan.incremental.snapshot.enabled' = 'true','chunk.size' = '1000','server-time-zone' = 'Asia/Shanghai','format' = 'debezium-json','heartbeat.interval' = '5000'
);

2.参数调优建议

1. 参数调优

  • 小表或中等规模表

    • 启用默认快照模式(scan.startup.mode=initial)即可满足需求。
  • 大表

    • 启用增量快照(scan.incremental.snapshot.enabled=true),并设置适当的 chunk.sizescan.incremental.snapshot.chunk.key-columns
  • 表锁策略

    • 尽量使用无锁模式(debezium.snapshot.locking.mode=none),避免对生产库的影响。
  • 并行度

    • 根据表的规模和数据量调整 parallelism,一般建议为 CPU 核心数的 2 倍。

2. 特殊场景注意事项

  • DDL 捕获:(很鸡肋)

    • 如果需要捕获表结构变更(如新增字段),需要启用 debezium.include.schema.changes
  • 分区表支持

    • 对于分区表,确保 database-nametable-name 使用正则表达式定义范围。
  • 无主键表

    • 对于无主键的表,数据会被全量更新,容易产生性能瓶颈,建议增加主键或唯一索引。
  • 数据延迟监控

    • 配置 heartbeat.interval,确保实时监控 CDC 连接是否正常,并能快速恢复数据流。

http://www.ppmy.cn/news/1557865.html

相关文章

NestJS中使用DynamicModule构建插件系统

1. 介绍 在NestJS中,模块是组织代码的基本单元,它将相关的服务和控制器组织在一起。然而,在某些情况下,我们可能需要根据不同的条件动态加载模块,以满足不同的业务需求。这时,就可以使用DynamicModule了。…

若依微服务如何获取用户登录信息

文章目录 1、需求提出2、应用场景3、解决思路4、注意事项5、完整代码第一步:后端获取当前用户信息第二步:前端获取当前用户信息 5、运行结果6、总结 1、需求提出 在微服务架构中,获取当前用户的登录信息是开发常见的需求。无论是后端处理业务…

whisper实时语音转文字

import whisperimport osdef check_file_exists(file_path):if not os.path.exists(file_path):raise FileNotFoundError(f"音频文件不存在: {file_path}")# 音频文件路径 audio_path r"D:\视频\temp_audio.wav"# 检查文件是否存在 check_file_exists(aud…

力扣238. 除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…

Qt创建自定义Help文档步骤

Qt创建自定义Help文档步骤 上一篇文章中,介绍了Qt提供的Help框架创建帮助文档,这一篇实际来演示一下创建的步骤。 一、创建Qt项目 比如Qt创建了一个项目,我在菜单栏预留了一个接口,点击进入帮助模块,如下图所示: 当我点击菜单栏中的“帮助”时,帮助模块就弹出。 二、…

搭建Docker Harbor仓库

搭建 Docker Harbor 仓库是一个常见的任务,Harbor 是一个企业级的 Docker Registry 管理工具,提供了镜像管理、用户权限控制、镜像扫描等功能。下面是搭建 Harbor 仓库的详细步骤。 1. 环境准备 在开始之前,确保你的服务器满足以下要求&…

Maven 中央仓库访问过慢的解决方案--设置国内镜像

在现今的 Java 开发活动中, 无论你是用古老的 Ant, 还是 Maven 本身, 亦或是 Gradle, 你都经常需要访问 Maven 的中央仓库以获取所依赖的包. 鉴于中央仓库的访问巨大, 再背上我们特殊国情的友军火力的锅, 获取依赖的过程中经常慢得令人发指, 甚至导致构建失败, IDE 失去响应等等…

MySQL使用LOAD DATA INFILE方式导入文本文件

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…