【问题标题】:Debezium Postgres Connector "After applying the include/exclude list filters, no changes will be captured"Debezium Postgres 连接器\“应用包含/排除列表过滤器后,不会捕获任何更改\”
【发布时间】:2022-10-25 20:32:57
【问题描述】:

我正在使用 Debezium(一个 Kafka 连接器)来捕获 Postgres 数据库更改,我从 Debezium 收到一个错误。有谁知道下面的错误是什么意思,也许会提供修复它的建议。

更多调试信息:

  • 我尝试了 "schema.include.list": "banking" 和 "database.include.list": "banking"... 都不起作用
  • 我尝试了 debezium/connect:1.4 并且它可以工作...但不适用于 debezium/connect:1.5+(1.9 是可用的最高版本,但它不起作用(与以下相同的错误)
Postgres|dbserver1|snapshot  After applying the include/exclude list filters, no changes will be captured. Please check your configuration!   [io.debezium.relational.RelationalDatabaseSchema]

我已经(在日志中)验证了 Kafka(和模式注册表等)运行正常,并且 Debezium 连接器似乎已经启动,并且 Postgres iw 正常工作并且创建了数据库和表。

下面是 Debezium 连接器配置:

{
    "name": "banking-postgres-connector",
    "config": {
        "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
        "database.hostname": "postgres",
        "database.port": "5432",
        "database.user": "postgres",
        "database.password": "postgres",
        "database.dbname" : "banking",
        "database.server.name": "dbserver1",
        "database.include.list": "banking",
        "tasks.max": "1",
        "table.include.list": "public.x_account,public.x_party,public.x_product,public.x_transaction"
    }
}

【问题讨论】:

  • 也许你想要schema.include.list?否则,我认为您不需要在表格上使用 public. 前缀
  • @OneCricketeer - 感谢您的建议 - 我试过了,不幸的是它不起作用......我更新了问题以反映这一点,再加上经过更多调试,似乎它作品使用 debezium/connect:1.4 但不工作使用任何更高版本到 debezium/connect:1.9(最新版本)...我能想到的最好的方法是 kafka、connect 或 postgres docker-compose 文件之间存在差异...将在我发布更多详细信息(或答案)时进步

标签: postgresql apache-kafka debezium debezium-engine debezium-server


【解决方案1】:

经过数小时的调试(加上来自@OneCricketeer 的一些建议,为我指明了正确的方向),我设法获得了一个适用于 debezium/connect:1.9 的配置。解决方案是通过消除配置项来使用默认值:

database.include.list
schema.include.list

这个最终的工作 Debezium 配置如下:

{
    "name": "banking-postgres-connector",
    "config": {
        "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
        "database.hostname": "postgres",
        "database.port": "5432",
        "database.user": "postgres",
        "database.password": "postgres",
        "database.dbname" : "banking",
        "database.server.name": "dbserver1",
        "tasks.max": "1"
    }
}

这确实指出了 Debezium 文档和代码中的一个小差距:

  1. 文档应为“schema.include.list”或“database.include.list”提供有效值(示例),因为单独为任一值添加数据库名称似乎不适用于 postgres...
  2. 如果能从日志中获得更多信息,那就太好了...警告消息既难以找到/理解,又使警告消息几乎没有追索权。由于这是一种情况不数据被捕获,它可能需要更高的重要性(记录错误?)

    注意:我提供上述建议是因为我发现 Debezium 是一款出色的产品!

【讨论】:

  • 这应该会拉出所有银行数据库表,但您似乎只想要少数几个?
  • @OneCricketeer 是的,这得到了所有这些(我使用 table.include.list 允许我过滤它们的属性) - 奇怪的关键问题是当我在 database.include.list 或 schema.include 中指定“银行业务”时.list 它根本没有找到任何东西,这修复了)
【解决方案2】:

我自己也有类似的问题。在 pgadmin 中查看时数据库服务器的结构是

  Servers
   Server Name (Local)
    Databases (9)
     database_1
      ...
      Schemas(1)
        public 
          ...
          Tables (56)
             table_1
             ...

设置配置值

debezium.source.database.dbname = database_1
debezium.source.schema.include.list=public

然后分别尝试以下

debezium.source.table.include.list=table_1
debezium.source.table.include.list=public.table_1

但没有成功,同样的警告日志。

【讨论】:

    猜你喜欢
    • 2019-05-08
    • 2019-05-25
    • 1970-01-01
    • 2022-01-13
    • 2018-12-28
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多