【问题标题】:table.include.list configuration parameter not working in Debezium Postgres Connectortable.include.list 配置参数在 Debezium Postgres 连接器中不起作用
【发布时间】: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 版本?

标签: postgresql apache-kafka-connect 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 没有问题。

解决方案:

  1. 为每个表创建单独的发布:

    CREATE PUBLICATION dbz_planning FOR TABLE partsmaster.planning;

  2. 删除之前的复制槽:

    选择 pg_drop_replication_slot('debezium_planning');

  3. 更改您的连接器配置:

    { "slot.name": "dbz_planning", “publication.name”:“planning_publication” }

瞧!

【讨论】:

  • 欢迎来到 SO!请不要使用答案来提出您自己的问题。相反,打开一个新问题,如果适用,请参考这个问题。另请参阅How to Ask
  • 开题的人没有回复他用的是什么版本,什么配置。为了减少未决问题,我已将信息添加到同一问题中。这是同样的问题。如果我应该删除评论,请告诉我。
  • 嗨,我理解你的理由。然而,这不是 StackOverflow 的工作方式。答案应始终尝试回答 OP 的问题(请参阅How to Answer)。如果您有相同的问题,则它要么已包含在现有问题中,要么您有其他/新信息,这使其成为不同的问题。即使您看到相同的行为,这是否意味着它是相同的问题也只有知道实际答案的人才能确定。一旦你获得了足够的声誉,你也可以评论其他人的问题。
  • 对表格使用单独的出版物对我有用。
猜你喜欢
  • 2021-09-03
  • 2021-07-27
  • 2020-04-20
  • 2019-05-25
  • 2019-02-16
  • 2021-05-21
  • 2020-02-16
  • 2020-05-13
  • 2020-11-10
相关资源
最近更新 更多