debezium 无法使用带有默认插件 pgoutput 的 postgres 11 访问文件“decoderbufs”

Posted

技术标签:

【中文标题】debezium 无法使用带有默认插件 pgoutput 的 postgres 11 访问文件“decoderbufs”【英文标题】:debezium could not access file "decoderbufs" using postgres 11 with default plugin pgoutput 【发布时间】:2020-05-15 14:34:54 【问题描述】:

我是 kafka 的新手,我正在尝试使用 debezium postgres 连接器。 但即使将 postgres 版本 11 与标准插件一起使用,我也会收到此错误: org.apache.kafka.connect.errors.ConnectException:org.postgresql.util.PSQLException:错误:无法访问文件“decoderbufs”:没有这样的文件或目录

要运行 kafka / debezium,我使用的是 fast-data-dev docker 的映像,如下所示

  # this is our kafka cluster.
  kafka-cluster:
    image: landoop/fast-data-dev:latest
    environment:
      ADV_HOST: 127.0.0.1         # Change to 192.168.99.100 if using Docker Toolbox
      RUNTESTS: 0                 # Disable Running tests so the cluster starts faster
    ports:
      - 2181:2181                 # Zookeeper
      - 3030:3030                 # Landoop UI
      - 8081-8083:8081-8083       # REST Proxy, Schema Registry, Kafka Connect ports
      - 9581-9585:9581-9585       # JMX Ports
      - 9092:9092                 # Kafka Broker

运行后我可以打开我的 localhost:3030 来选择 debezium 连接器,我是这样配置的:

我在 11.5 版中使用 aws postgres rds 看了几个使用wal2json的教程,但是在rds.extensions中没有找到,也没有看到添加的方法。无论如何,从版本 10 开始,debezium 可以使用 pgoutput,显然不需要配置。

rds.logical_replication 属性设置为 1 执行 SHOW wal_level 时;在终端我看到它返回逻辑 在文档中说您必须设置 max_wal_senders = 1 和 max_replication_slots = 1 放入 rds 中,is 5, so I left the default that 的最小值为 10

我没有定义角色 REPLICATION,因为据我在 rds 中的理解,没有办法

在这张图片中你可以看到使用的版本是 11.5

但我得到了如下所示的错误

【问题讨论】:

我发现了问题,我点击了一个选项并显示了所有的值,许多默认值已经被填充,plugin.name 带有decoderbufs,它只是切换到 pqoutput 工作 "plugin.name": "pgoutput" @DaviResio 你在哪里找到“plugin.name”选项? @ Vikrant Goel 问题是这个,我没有找到这个选项。我找到并放置了 pgoutput。谢谢 【参考方案1】:

您尚未在 Debezium @ 中将 "plugin.name" 属性设置为 "pgoutput" 987654321@ 你已经知道了。但此答案适用于不知道在哪里设置此选项的其他人并更清楚。

在以下连接器属性中:

由于您尚未设置 plugin.name 选项,因此它采用默认值 decoderbufs,这就是您收到以下错误的原因:

"plugin.name" 显式设置为 "pgoutput" 应该可以解决问题。

 
  "connector.class": "io.debezium.connector.postgresql.PostgresConnector", 
  "database.user": "postgres",
  "database.dbname": "xxxxx",
  "tasks.max": "1", 
  "database.hostname": "xxxx.rds.amazonaws.com", 
  "database.password": "xxxx", 
  "database.server.name": "database-1",
  "database.port": "5432",
  "plugin.name": "pgoutput" --> this property

【讨论】:

以上是关于debezium 无法使用带有默认插件 pgoutput 的 postgres 11 访问文件“decoderbufs”的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到很多带有 debezium 的重复项?

ClassNotFoundException 使用带有本地类和 Debezium 引擎的 QuarkusClassLoader

带有 TimescaleDB 扩展的 Debezium 连接器

带有 debezium 嵌入式连接器的外部偏移存储

使用带有 Avro 序列化的 Debezium mongodb CDC 创建的模式太多

带有连接 table.include.list 的 Debezium docker 不起作用