MySQL CDC源表是用于实时读取MySQL数据库中的数据变化的一种机制,它通过捕获数据变更(Change Data Capture, CDC)来实现数据的实时同步和处理,以下是关于MySQL CDC源表的详细介绍:
功能描述
MySQL CDC源表会先读取数据库的历史全量数据,然后平滑切换到Binlog读取上,以保证数据的完整读取,这种机制确保了数据的一致性和完整性,使得CDC源表能够准确地反映数据库的最新状态。
前提条件
要使用MySQL CDC源表,需要满足以下条件:
MySQL版本为5.7或8.0.x。
MySQL已开启了Binlog,并且binlog_row_image设置为FULL。
已创建MySQL用户,并授予了SELECT、 SHOW DATABASES、REPLICATION SLAVE和REPLICATION CLIENT权限。
DLI与MySQL建立了增强型跨源连接,且用户可以根据实际所需设置相应安全组规则。
注意事项
在使用MySQL CDC源表时,需要注意以下几点:
创建Flink OpenSource SQL作业时,需要选择正确的Flink版本,并勾选“保存作业日志”以方便后续查看作业日志。
同一个数据库下,建议每个MySQL CDC作业配置不同的Server ID,以避免Binlog位点错乱和CPU陡增的问题。
MySQL CDC源表暂不支持定义Watermark,如果需要进行窗口聚合,请参考常见问题描述。
当使用MySQ CDM源表时,请不要在源表参数里手动关闭debezium.connect.keep.alive,以确保拉取Binlog线程的稳定性。
语法格式
创建MySQL CDC源表的语法格式如下:
CREATE TABLE mySqlCdcSource ( attr_name attr_type (',' attr_name attr_type)* (','PRIMARY KEY (attr_name, ...) NOT ENFORCED) ) WITH ( 'connector' = 'mysqlcdc', 'hostname' = 'mysqlHostname', 'username' = 'mysqlUsername', 'password' = 'mysqlPassword', 'databasename' = 'mysqlDatabaseName', 'tablename' = 'mysqlTableName' );
各参数的含义如下:
参数 | 说明 | 是否必填 | 备注 |
connector | connector类型,需配置为’mysqlcdc’ | 是 | |
hostname | MySQL数据库的IP地址或者Hostname | 是 | |
username | MySQL数据库的用户名 | 是 | |
password | MySQL数据库的密码 | 是 | |
databasename | 访问的数据库名称 | 是 | 数据库名称支持正则表达式以读取多个数据库的数据 |
tablename | 访问的表名 | 是 | 表名支持正则表达式以读取多个表的数据 |
port | MySQL数据库的端口号 | 否 | 默认值为3306 |
serverid | 数据库客户端的一个数字ID,该ID必须是MySQL集群中全局唯一的 | 否 | 建议针对同一个数据库的每个作业都设置不同的ID |
scan.startup.mode | 消费数据时的启动模式 | 否 | initial(默认):在第一次启动时,会先扫描历史全量数据,然后读取最新的Binlog数据;latestoffset:在第一次启动时,不会扫描历史全量数据,直接从Binlog的末尾开始读取 |
servertimezone | 数据库在使用的会话时区 | 否 | Asia/Shanghai |
pwd_auth_name | DLI侧创建的Password类型的跨源认证名称 | 否 | 使用跨源认证则无需在作业中配置置账号和密码 |
FAQs
问题1:MySQL CDC源表如何工作,会对数据库造成什么影响?
答:MySQL CDC源表通过捕获MySQL数据库中的数据变更来实现数据的实时同步和处理,它会先读取数据库的历史全量数据,然后平滑切换到Binlog读取上,这种机制对数据库的影响主要体现在以下几个方面:需要开启MySQL的Binlog功能,这可能会增加数据库的存储压力;CDC源表在读取数据时会产生一定的网络开销;如果CDC作业配置不当(如多个作业使用相同的Server ID),可能会导致Binlog位点错乱和CPU陡增的问题。
问题2:MySQL CDC源表暂不支持定义Watermark,如果需要进行窗口聚合,请参考常见问题描述,如何进行窗口聚合呢?
答:由于MySQL CDC源表暂不支持定义Watermark,因此无法直接使用Flink的窗口聚合功能,如果需要进行窗口聚合,可以考虑将CDC源表中的数据写入到一个支持窗口聚合的目标表中(如Kafka、HBase等),然后在目标表中进行窗口聚合操作,具体实现方式需要根据业务需求和目标表的特性来设计。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1114493.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复