我无法使 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: 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"
. 不幸的是,这不是我们需要数据的地方。
任何帮助非常感谢。
我注意到源代码似乎在尝试做正确的事情......然后意识到我们使用的 JDBC 接收器连接器版本没有这些修改,这些修改是最近的。我从 JDBC 接收器连接器 jar 的 4.1.0 版移动到 5.0.0 版,瞧,数据正在流入我指定的架构中的表中。🙃