Kafka Connect 接收到不在公共模式中的 Redshift 表
Posted
技术标签:
【中文标题】Kafka Connect 接收到不在公共模式中的 Redshift 表【英文标题】:Kafka Connect sink to Redshift table not in public schema 【发布时间】:2019-02-26 06:43:11 【问题描述】:我无法使 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
“org.apache.kafka.connect.errors.RetriableException: java.sql.SQLException: java.sql.SQLException: Amazon Invalid operation: 关系“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】:我注意到源代码似乎在尝试做正确的事情……然后意识到我们使用的 JDBC 接收器连接器的版本没有那些修改,这些修改是最近的。我从 JDBC 接收器连接器 jar 的 4.1.0 版本移动到 5.0.0 版本,瞧,数据正在流入我指定的模式中的表中。 ?
【讨论】:
以上是关于Kafka Connect 接收到不在公共模式中的 Redshift 表的主要内容,如果未能解决你的问题,请参考以下文章
kafka-connect JDBC PostgreSQL Sink Connector 显式定义 PostgrSQL 模式(命名空间)