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 中的特定表

删除“table.include.list”不会强制 Debezium 为数据库中的其余表创建主题

TiDB修改配置参数

如何配置HANA参数

kafka参数配置