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

时间:2018-09-21 20:36:42

标签: jdbc apache-kafka apache-kafka-connect confluent debezium

我无法使不在公共架构中的表使用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 ...既为redshift jdbc驱动程序也为postgresql。没有运气。

我正在使用Kafka Connect版本1.1.0

Redshift JDBC JAR:RedshiftJDBC42-1.2.16.1027.jar

通过将表放在public模式中并指定没有模式的表名"table.name.format": "test_table",我就能获得数据流。 不幸的是,这不是我们需要数据的地方。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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