Flink CDC可以获取MySQL主从分库,分库分表的binlog,但是需要注意以下几点:
- Flink CDC需要配置MySQL的binlog模式为row,以及开启GTID(全局事务标识符),以便正确地识别和处理binlog事件
- Flink CDC需要配置MySQL的主从复制关系,以及指定主库或从库的地址,以便正确地连接和读取binlog数据
- Flink CDC需要配置MySQL的分库分表规则,以及指定分库分表的键,以便正确地合并和转换binlog数据
一个可能的Flink CDC获取MySQL主从分库,分库分表的binlog的示例如下:
-- 创建MySQL主从分库,分库分表的表对象
CREATE TABLE mysql_user (
id INT PRIMARY KEY NOT ENFORCED,
name STRING,
age INT
) WITH (
'connector' = 'mysql-cdc',
'hostname' = 'master-host', -- 主库地址
'port' = '3306',
'username' = 'root',
'password' = '123456',
'database-name' = 'test', -- 分库名
'table-name' = 'user_${0-9}', -- 分表名
'server-id' = '5400', -- 从库ID
'scan.startup.mode' = 'initial', -- 初始扫描模式
'scan.split.size' = '8096', -- 扫描块大小
'debezium.snapshot.locking.mode' = 'none', -- 快照锁定模式
'debezium.gtid.source.includes' = '', -- GTID包含范围
'debezium.gtid.source.excludes' = '' -- GTID排除范围
);
-- 使用Flink SQL或DataStream API将MySQL的增量数据写入到其他目标,如Hive、Doris等
INSERT INTO hive_user SELECT * FROM mysql_user;
-- DataStream API
DataStream<Row> stream = tEnv.toAppendStream(tEnv.sqlQuery("SELECT * FROM mysql_user"), Row.class);
tEnv.createTemporaryView("stream", stream);
tEnv.executeSql("INSERT INTO doris_user SELECT * FROM stream");