Debezium系列之:Debezium 中的增量快照
Debezium系列之:Debezium 中的增量快照
- 为什么需要增量快照?
- 遗留解决方案
- 基于水印的快照
- 信号表
- 在Debezium中的增量快照
- 连接器的重启
- 限制
- 演示
为什么需要增量快照?
- 自 Debezium 问世以来,其中最大的痛点之一是对捕获表列表更改的支持不够优化。作为用户,您创建一个包含要捕获的表列表的新连接器(table.include.list 和相关选项);在以后的某个时间点,可能需要调整此配置,以捕获最初不属于 CDC 的其他表。如果只需要从这些表中流式传输更改,那么问题就很简单。但如果您还需要捕获表中的现有内容呢?
- 传统上,Debezium 在快照阶段中完成对表中现有数据的捕获。此阶段在第一次连接器启动时执行一次,其目的是在某个时间点捕获一致的数据(将静态数据转换为动态数据)。这可能是一个相当长的操作,并且根据定义,它必须完全执行或不执行-有点像事务语义。这意味着如果由于连接器重新启动而未完成快照,则必须从头重新执行,并且已经完成的所有内容都将被抛弃。此外,在快照被拍摄时,任何在数据库中并行执行的数据修改都不会被流式传输,直到快照完成。这可能会导致非常大的快照出现数据库资源问题,因为必须保持事务日志可用,直到开始流式传输。
因此,我们最终面临着三个问题需要解决:
- 如果需要流式传输现有数据,则几乎不可能将其他表添加到捕获的表列表中
- 长时间运行的一致性快照过程无法终止或恢复</