table.include.list 配置参数在 Debezium Postgres 连接器中不起作用
Posted
技术标签:
【中文标题】table.include.list 配置参数在 Debezium Postgres 连接器中不起作用【英文标题】:table.include.list configuration parameter not working in Debezium Postgres Connector 【发布时间】:2021-01-14 22:59:27 【问题描述】:我正在使用 Debezium Postgres 连接器来捕获 postgres 表中的更改。
此连接器的文档 https://debezium.io/documentation/reference/connectors/postgresql.html
提到一个配置参数
table.include.list
但是,当我将此参数的值设置为“config.abc”时。即使在配置模式(即 abc 和 def)中的两个表的更改都被流式传输之后。
我想这样做的原因是我想为 2 个表中的每一个创建 2 个单独的连接器,以拆分负载并更快地更改数据流。
这是一个已知问题吗?无论如何要克服这个?
【问题讨论】:
能否分享您的连接器配置?你使用什么 Debezium 版本? 【参考方案1】:这里有同样的问题(Debezium 版本:1.1.0.Final 和 postgresql:11.13.0)。以下是我的配置:
"connector.class": "io.debezium.connector.postgresql.PostgresConnector",
"transforms.unwrap.delete.handling.mode": "rewrite",
"slot.name": "debezium_planning",
"transforms": "unwrap,extractInt",
"include.schema.changes": "false",
"decimal.handling.mode": "string",
"database.schema": "partsmaster",
"transforms.unwrap.drop.tombstones": "false",
"transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
"value.converter": "org.apache.kafka.connect.json.JsonConverter",
"key.converter": "org.apache.kafka.connect.converters.LongConverter",
"database.user": "************",
"database.dbname": "smartng-db",
"transforms.extractInt.type": "org.apache.kafka.connect.transforms.ExtractField$Key",
"database.server.name": "ASLog.m3d.smartng-db",
"database.port": "***********",
"plugin.name": "pgoutput",
"column.exclude.list": "create_date, create_user, change_date, change_user",
"transforms.extractInt.field": "planning_id",
"database.hostname": "************",
"database.password": "*************",
"name": "ASLog.m3d.source-postgres-smartng-planning",
"transforms.unwrap.add.fields": "op,table,lsn,source.ts_ms",
"table.include.list": "partsmaster.planning",
"snapshot.mode": "never"
另一个表partsmaster.basic 中的更改导致此连接器失败,因为属性planning_id 在表partsmaster.basic 中不可用。
我需要为每张桌子使用单独的连接器。 table.include.list 不起作用。 table.exclude.list 都没有。
我最后的办法是为每个连接器使用单独的 Postgres 发布。但我仍然希望我能在这里找到一个即时的配置解决方案,或者指出我所缺少的。在以前的版本中,我使用 table.whitelist 没有问题。
解决方案:
为每个表创建单独的发布:
CREATE PUBLICATION dbz_planning FOR TABLE partsmaster.planning;
删除之前的复制槽:
选择 pg_drop_replication_slot('debezium_planning');
更改您的连接器配置:
"slot.name": "dbz_planning", “publication.name”:“planning_publication”
瞧!
【讨论】:
欢迎来到 SO!请不要使用答案来提出您自己的问题。相反,打开一个新问题,如果适用,请参考这个问题。另请参阅How to Ask。 开题的人没有回复他用的是什么版本,什么配置。为了减少未决问题,我已将信息添加到同一问题中。这是同样的问题。如果我应该删除评论,请告诉我。 嗨,我理解你的理由。然而,这不是 *** 的工作方式。答案应始终尝试回答 OP 的问题(请参阅How to Answer)。如果您有相同的问题,则它要么已包含在现有问题中,要么您有其他/新信息,这使其成为不同的问题。即使您看到相同的行为,这是否意味着它是相同的问题也只有知道实际答案的人才能确定。一旦你获得了足够的声誉,你也可以评论其他人的问题。 对表格使用单独的出版物对我有用。以上是关于table.include.list 配置参数在 Debezium Postgres 连接器中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
带有连接 table.include.list 的 Debezium docker 不起作用
Kafka 连接(Debezium mysql 连接器)只监听 table.include.list 中的特定表