我正在浏览 Debezium MySql Connector 源代码并尝试理解表快照逻辑。
1) 查看类“io.debezium.connector.mysql.SnapshotReader”execute() 方法,似乎所有表快照都是在单个线程中获取的。 这是真的?对于具有大量表的数据库,它不以并行方式处理表吗?
2)另外,似乎为了拍摄快照,它使用“SELECT * from {table}”查询。如果快照操作失败(由于数据库连接失败、Kafka连接器重新启动等),它是否使用以下命令从以前的位置恢复: Kafka Connect 偏移机制?
最佳答案
是的,即使对于大型数据库,也使用单个线程进行快照。
没有
If the connector fails, is rebalanced, or stops before the snapshot is complete, the connector will begin a new snapshot when it is restarted.
引用:https://debezium.io/docs/connectors/mysql/#snapshots
这两者的原因都是快照机制。快照是在单个事务中拍摄的。首先,事务仅限于单个数据库连接。即使使用具有单个数据库连接的多个线程也会导致线程等待其他线程释放连接。
其次,使用 Kafka 连接偏移量恢复快照存在很多问题。什么偏移?到那时,表格中可能已经发生了一些修改。
关于mysql - Debezium MySql 连接器 : Table snapshots are taken in a single thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57248471/