Debezium MySql 连接器:Table 快照是在单个线程中拍摄的?

Debezium MySql Connector : Table snapshots are taken in a single thread?

我正在研究 Debezium MySql 连接器源代码并试图理解 table 快照逻辑。

1) 查看 class 'io.debezium.connector.mysql.SnapshotReader' execute() 方法,似乎所有 table 快照都是在单个线程中拍摄的。 这是真的?对于具有大量 table 的数据库,它不会以并行方式处理 table?

https://github.com/debezium/debezium/blob/master/debezium-connector-mysql/src/main/java/io/debezium/connector/mysql/SnapshotReader.java

2) 此外,它似乎使用 "SELECT * from {table}" query.If 拍摄快照 快照操作失败(由于数据库连接失败,Kafka 连接器重启等)它是否从以前的位置恢复使用 Kafka Connect 偏移机制?

  1. 是的,即使是大型数据库也使用单线程进行快照。

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连接偏移恢复快照有很多问题。什么抵消?届时 table.

中可能会有一些修改