我无法使不在公共架构中的表使用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尝试写一行时,都会遇到此错误:
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"
,我就能获得数据流。
不幸的是,这不是我们需要数据的地方。
非常感谢任何帮助。
答案 0 :(得分:0)
我注意到源代码似乎正在尝试做正确的事情……然后意识到我们所使用的JDBC接收器连接器的版本没有进行那些修改,这些修改有些是最近的。我从JDBC接收器连接器jar的版本4.1.0迁移到版本5.0.0,voila数据正在以指定的模式流入表中。