我正在使用Debezium(0.7.5)MySQL连接器,并且试图了解如果要使用选项table.whitelist
更新此配置的最佳方法是什么。
假设我创建了一个连接器,如下所示:
curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" http://debezium-host/connectors/ -d '
{
"name": "MyConnector",
"config": {
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"connect.timeout.ms": "60000",
"tasks.max": "1",
"database.hostname": "myhost",
"database.port": "3306",
"database.user": "***",
"database.password": "***",
"database.server.id": "3227197",
"database.server.name": "MyServer",
"database.whitelist": "myDb",
"table.whitelist": "myDb.table1,myDb.table2",
"database.history.kafka.bootstrap.servers": "kb0:9092,kb1:9092,kb2:9092",
"database.history.kafka.topic": "MyConnectorHistoryTopic",
"max.batch.size": "1024",
"snapshot.mode": "initial",
"decimal.handling.mode": "double"
}
}'
一段时间(2周)后,我需要向此myDb.table3
选项添加新表(table.whitelist
)(该表是旧表,它是在连接器之前创建的)< / p>
我尝试过的是:
通过API更新命令:
curl -i -X PUT -H "Accept:application/json" -H "Content-Type:application/json" https://kafka-connect-host/connectors/MyConnector/config/ -d '
{
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"connect.timeout.ms": "60000",
"tasks.max": "1",
"database.hostname": "myhost",
"database.port": "3306",
"database.user": "***",
"database.password": "***",
"database.server.id": "3227197",
"database.server.name": "MyServer",
"database.whitelist": "myDb",
"table.whitelist": "myDb.table1,myDb.table2,myDb.table3",
"database.history.kafka.bootstrap.servers": "kb0:9092,kb1:9092,kb2:9092",
"database.history.kafka.topic": "MyConnectorHistoryTopic",
"max.batch.size": "1024",
"snapshot.mode": "schema_only",
"decimal.handling.mode": "double"
}'
但是它没有用,也许这根本不是最好的方法。
在其他连接器中,我没有使用选项table.whitelist
,因此当我需要监听新表时,我没有这个问题。
我的最后一个选择是,删除该连接器,并使用新配置创建另一个连接器,同时监听新表(myDb.table3
)。问题是如果我要从myDb.table3
中创建初始数据,而我必须使用快照initial
创建,但是我不想从其他表{{1}中的快照中生成所有消息}。
答案 0 :(得分:2)
Debezium Server 最新版本,可以添加如下配置
debezium.snapshot.new.tables=parallel
如果你使用的是 Debezium,你可以试试这个配置值
snapshot.new.tables=parallel
注意:Debeziyum Server 是支持 Kinesis、Google Pub sub 和 Apache Pulsar 的服务器。我正在使用它,它的配置有点不同。我必须在每个项目之前加上“debezium”
添加此配置后,对tables.whitelist 的任何添加,Debezium 都会为这些附加表创建快照。
我无法将您指向文档,但我在 GitHub 中浏览了他们的代码,并且我实际上尝试了它,这对我有用。 这是 MySqlConnector 代码的链接
有搜索 Field.create("snapshot.new.tables")
就我个人而言,我觉得 Debezium 有很多东西,但文档很分散。
答案 1 :(得分:0)
目前尚不支持对白名单/黑名单配置的更改。目前正在对此进行处理(请参见DBZ-175),我们希望在下一发行版中对此提供预览支持。有一个pending PR,但是还需要做更多的工作。
在实施此方法之前,最好的选择是设置连接器的新实例,该实例仅 会捕获您感兴趣的其他表。这是以运行两个连接器为代价的(它们都将维持binlog阅读器会话),但是只要您不需要太频繁地更改过滤器配置,它就可以解决问题。