Debezium OracleSnapshotChangeEventSource 分析
目录
1. 概述
OracleSnapshotChangeEventSource 是 Debezium Oracle 连接器中负责执行数据库快照的核心组件,主要负责:
- 初始数据快照
- 增量数据快照
- Schema 快照
- 快照进度跟踪和恢复
2. 核心功能
2.1 快照模式
- 初始快照(INITIAL)
- Schema 快照(SCHEMA_ONLY)
- 增量快照(INCREMENTAL)
- 自定义快照(CUSTOM)
2.2 快照过程
- 锁定表
- 读取数据
- 生成事件
- 提交偏移量
2.3 快照管理
- 进度跟踪
- 错误处理
- 资源管理
- 性能优化
3. 实现分析
3.1 核心组件
public class OracleSnapshotChangeEventSource
implements SnapshotChangeEventSource {
private final OracleConnection connection;
private final OracleDatabaseSchema schema;
private final SnapshotProgressListener progressListener;
private final Clock clock;
private final SnapshotContext snapshotContext;
}
3.2 关键方法
public class SnapshotContext {
private final Map<TableId, TableMetadata> tables;
private final SnapshotMode snapshotMode;
private final long startScn;
private volatile long currentScn;
private volatile SnapshotPhase phase;
public void captureTable(TableId tableId) {
// 1. 获取表元数据
TableMetadata metadata = getTableMetadata(tableId);
// 2. 创建快照查询
String snapshotQuery = createSnapshotQuery(metadata);
// 3. 执行查询并生成事件
try (ResultSet rs = executeQuery(snapshotQuery)) {
while (rs.next()) {
SourceRecord record = createSourceRecord(rs, metadata);
dispatcher.dispatchSnapshotEvent(tableId, record);
}
}
// 4. 更新进度
progressListener.tableSnapshotCompleted(tableId);
}
}