0

我无法使 Kafka Connect 接收器为不在公共模式中的表工作。

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

我已经在 Redshift 中创建了我的目标表,但它不在public架构中。( my_schema.test_table. 注意:auto.create&auto.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:亚马逊无效操作:关系“test_table”不存在;”
    • 可能是因为test_table不在公共模式中。: (

看起来代码正在尝试正确解析这个表名,但不幸的它没有记录它的结果。

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

我一直在尝试currentSchema=my_schema在连接字符串中指定......既适用于redshiftjdbc 驱动程序,也适用于postgresql. 没运气。

我正在使用 Kafka Connect 1.1.0 版

红移 JDBC JAR:RedshiftJDBC42-1.2.16.1027.jar

我可以通过将表放入public架构中并指定没有架构的表名来获得数据流动:"table.name.format": "test_table"。不幸的是,这不是我们需要数据的地方。

非常感谢任何帮助。

4

1 回答 1

0

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

于 2018-10-19T20:00:55.197 回答