最近使用flink sql cdc实现实时报表,cdc是基于debezium实现的全量和增量数据读取。根据flink sql cdc源码和日志输出可以看到其执行过程,过程包括以下10个步骤:
- 禁止mysql自动提交、开启可重复读事务、并且设置锁和锁的超时时间(disabling autocommit, enabling repeatable read transactions, and setting lock wait timeout to 10);
- 执行flush table,以防止写入数据库,如果无法刷新并获取全局读取锁,读取表名后将使用表读取锁(flush and obtain global read lock to prevent writes to database);
- 开启一致性快照事务(start transaction with consistent snapshot);
- 从mysql master 的binlog获取position( read binlog position of MySQL master);
- 读取可用数据库读列表(read list of available databases);
- 读取每一个数据库下可用的table(read list of available tables in each database);
- 生成drop和create statements映射当前数据库schemas(generating DROP and CREATE statements to reflect current database schemas);
- 释放全局读锁,让mysql恢复可写;
- 当事务仍然在处理时,继续扫描表,这个时候会去扫描作业中涉及的表,在这一步会去扫描完成所有的表(scanning contents of 1 tables while still in transaction);
- 提交事务(committing transaction);