Kafka 将接收器连接到不在公共架构中的 Redshift 表



我无法使 Kafka Connect 接收器适用于不在公共架构中的表。

我正在使用Kafka Connect通过JdbcSinkConnector的接收器操作将记录发送到Redshift数据库。

我已经在 Redshift 中创建了目标表,但它不在public架构中。(my_schema.test_table.注意:连接器配置中的auto.createauto.evolve关闭(

当我尝试在连接器配置中指定表的位置时,如下所示...

"table.name.format": "my_schema.test_table",

。接收器连接器的任务在尝试启动自身时遇到此错误:

"表 my_schema.test_table 丢失,自动创建已禁用">

Caused by: org.apache.kafka.connect.errors.ConnectException: Table my_schema.test_table is missing and auto-creation is disabled at io.confluent.connect.jdbc.sink.DbStructure.create(DbStructure.java:86) at io.confluent.connect.jdbc.sink.DbStructure.createOrAmendIfNecessary(DbStructure.java:63) at io.confluent.connect.jdbc.sink.BufferedRecords.add(BufferedRecords.java:78) ...

我尝试了以下格式来提供表名:

  • my_schema.test_table
  • dev.my_schema.test_table
  • test_table<--在这种情况下,我通过了阻止其他检查的存在检查,但是每次Kafka Connect尝试编写行时都会遇到此错误:
    • "org.apache.kafka.connect.errors.RetriableException: java.sql.SQLException: java.sql.SQLException: Amazon 无效操作: 关系 "test_table" 不存在;">
    • 可能是因为test_table不在公共架构中。 :(

似乎代码正在尝试正确解析此表名,但不幸的是它没有记录其结果。

这是我的连接字符串:"connection.url": "jdbc:redshift://xxx.xxx.xxx.xxx:5439/dev"

我已经在尝试中搞砸了,所以在连接字符串中指定currentSchema=my_schema...无论是redshiftJDBC 驱动程序还是postgresql.没有运气。

我正在使用 Kafka Connect 版本 1.1.0

Redshift JDBC JAR:RedshiftJDBC42-1.2.16.1027.jar

我能够通过将表放入public模式中并指定没有模式的表名称来使数据流动:"table.name.format": "test_table". 不幸的是,这不是我们需要数据的地方。

任何帮助非常感谢。

我注意到源代码似乎在尝试做正确的事情......然后意识到我们使用的 JDBC 接收器连接器版本没有这些修改,这些修改是最近的。我从 JDBC 接收器连接器 jar 的 4.1.0 版移动到 5.0.0 版,瞧,数据正在流入我指定的架构中的表中。🙃

相关内容

  • 没有找到相关文章

最新更新