由于架构不兼容,kafka jdbc源连接器无法注册架构

egdjgwm8  于 2021-07-15  发布在  Kafka
关注(0)|答案(0)|浏览(199)

我们有一个表,它的列modifiedtime不是可为null的列。我已经用它创建了一个视图,并将该列命名为rowlastupdated。此视图与Kafka同步。使用的数据库是oracle12c。
我在连接器状态中看到此问题:

Caused by: io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException:
     Schema being registered is incompatible with an earlier schema; error code: 409

我为这个视图查询了schema registry,结果只注册了一个schema。我只粘贴了rowlastupdated的avro模式,因为我缩小了问题的范围。

{
  "name":"ROWLASTUPDATED",
  "type":[
    "null",
    {
      "type":"long",
      "connect.version":1,
      "connect.name":"org.apache.kafka.connect.data.Timestamp",
      "logicalType":"timestamp-millis"
    }
  ],
  "default":null
}

后续迭代中的kafka源连接器注册了一个新的模式,其中rowlastupdated如下所示(我从连接器任务状态的堆栈跟踪中获得了以下模式):

{
      "name":"ROWLASTUPDATED",
      "type":{
         "type":"long",
         "connect.version":1,
         "connect.name":"org.apache.kafka.connect.data.Timestamp",
         "logicalType":"timestamp-millis"
      }
   }

我们可以观察到注册是在没有null类型的情况下进行的。这导致了架构不兼容问题。
从第1天开始,原始表中的modifiedtime列是不可为空的列。我想知道Kafka连接如何为同一个视图生成两个不同的模式。有人能帮我解决这个问题吗?
这是源连接器配置

connector.class : io.confluent.connect.jdbc.JdbcSourceConnector
timestamp.column.name : ROWLASTUPDATED
incrementing.column.name : IDCOL
errors.retry.timeout : -1
validate.non.null : false
connection.password : ...
timestamp.initial : 0
tasks.max : 1
connection.attempts : 120
batch.max.rows : 2000
errors.retry.delay.max.ms : 60000
timestamp.delay.interval.ms : 600000
connection.backoff.ms : 30000
table.types : view
table.whitelist : ...
mode : timestamp+incrementing
topic.prefix : view-
connection.user : ...
schema.pattern : ...
poll.interval.ms : 300000
name : connector-Test
connection.url : jdbc:oracle:thin:@//x.x.x:1521/x.x.x
fetch.size : 5000

我已将schema.pattern设置为源数据库用户。目标数据库也有同名的表,但用户不同。我查过了。因此,这个源连接器被正确配置为只查询源的视图。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题