flinkCDC - 功能验证记录
- flink 与cdc 版本使用搭配:
- flink cdc
- mysql cdc
- PostgreSqlCDC
- cdc sink to kafka
- 报错
- mysql时区错误,The server time zone value 'EDT' is unrecognized or represents
- java.lang.NoClassDefFoundError: io/debezium/connector/mysql/MySqlConnectorConfig
- Cannot discover a connector using option: 'connector'='mysql-cdc'
- Could not instantiate the executor. Make sure a planner module is on the classpath
- (source 算子 )The TaskExecutor is shutting down.
flink 与cdc 版本使用搭配:
flink1.13.6 + flink mysql cdc 1.4.0
flink 1.16.0 + flink mysql cdc 2.3.0
flink 1.16.0 + flink mysql cdc 2.4.0
flink 1.16.0 + flink postgresql cdc 2.3.0
flink 1.13.6 + flink mysql cdc 2.3.0 : 没有报错,没有数据,估计是兼容有问题
flink cdc
参数说明
1、调整chunck大小 : scan.incremental.snapshot.chunk.size
2、设置cdc模式:scan.startup.mode【initial(默认)、latest-offset】
3、支持chunk key 列设置,默认是第一个字段:scan.incremental.snapshot.chunk.key-column
官网:https://ververica.github.io/flink-cdc-connectors/master/content/connectors/postgres-cdc.html
原理分析
1、cdc mysql 全量快照阶段split sql :SELECT * FROM cdc_db
.tablename
WHERE id >= ? AND NOT (id = ?) AND id <= ?;
备注:id 是主键id
(DBLog)无锁算法论文
链接地址:https://arxiv.org/pdf/2010.12597.pdf , 对此算法感兴趣的可以看这位大佬的分享:https://zhuanlan.zhihu.com/p/600303844
论文部分摘要理解:
-
全量阶段:
1、flink cdc 任务启动后按设置的chunk size切分数据,sql如下:
(sql:SELECT * FROMcdc_db
.tablename
WHERE id >= ? AND NOT (id = ?) AND id <= ?; )
2、同时会启动读取binlog任务,读取chunk对应的binlog,通过binlog对 select chunk的数据做合并操作,此操作是合并在期间执行了update、delete操作,保证insert-only -
增量阶段:
1、不断追加数据
mysql cdc
cdc api 动态加表
1、启动任务,复制checkpoint路径
2、新增监听的表到tableList(可以使用同一个jar包,在外部传参动态加表)
3、从checkpoint初重启任务即可
flink cdc sql 性能压测
1、cdc mysql sink to kafka :一个takmanager , 4个