Postgresql Kafka JDBC接收器连接器后的数据不匹配
试图使用Postgresql Kafka JDBC接收器连接器后的数据不匹配,postgresql,jdbc,apache-kafka,apache-kafka-connect,debezium,Postgresql,Jdbc,Apache Kafka,Apache Kafka Connect,Debezium,试图使用kafka connect jdbc将数据导入PostgreSQL,但数据库中的某些值与kafka消息值不同 接收器配置: { "name": "test-sink", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector", "tas
kafka connect jdbc
将数据导入PostgreSQL,但数据库中的某些值与kafka消息值不同
接收器配置:
{
"name": "test-sink",
"config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
"tasks.max": "1",
"connection.url": "jdbc:postgresql://localhost:5432/test_db?user=test&password=test",
"dialect.name": "PostgreSqlDatabaseDialect",
"topics.regex": "test.public.(.*)",
"transforms": "dropPrefix, unwrap",
"transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
"transforms.unwrap.drop.tombstones": "false",
"transforms.dropPrefix.type": "org.apache.kafka.connect.transforms.RegexRouter",
"transforms.dropPrefix.regex": "test.public.(.*)",
"transforms.dropPrefix.replacement": "public.test_$1",
"auto.create": "true",
"auto.evolve": "true",
"insert.mode": "upsert",
"pk.fields": "id",
"pk.mode": "record_key",
"delete.enabled": "true",
"batch.size": "1"
}
}
卡夫卡主题中的信息:
{
“模式”:{
“类型”:“结构”,
“字段”:[
{
“类型”:“结构”,
“字段”:[
{
“类型”:“int64”,
“可选”:false,
“字段”:“id”
},
{
“类型”:“int64”,
“可选”:正确,
“字段”:“测试代码”
},
{
“类型”:“字符串”,
“可选”:正确,
“字段”:“测试b__c”
},
{
“类型”:“字符串”,
“可选”:正确,
“字段”:“测试”
},
{
“类型”:“数组”,
“项目”:{
“类型”:“字符串”,
“可选”:true
},
“可选”:正确,
“字段”:“测试”
},
{
“类型”:“int64”,
“可选”:正确,
“字段”:“测试id”
}
],
“可选”:正确,
“名称”:“test.public.test.Value”,
“字段”:“之前”
},
{
“类型”:“结构”,
“字段”:[
{
“类型”:“int64”,
“可选”:false,
“字段”:“id”
},
{
“类型”:“int64”,
“可选”:正确,
“字段”:“测试代码”
},
{
“类型”:“字符串”,
“可选”:正确,
“字段”:“测试b__c”
},
{
“类型”:“字符串”,
“可选”:正确,
“字段”:“测试”
},
{
“类型”:“数组”,
“项目”:{
“类型”:“字符串”,
“可选”:true
},
“可选”:正确,
“字段”:“测试”
},
{
“类型”:“int64”,
“可选”:正确,
“字段”:“测试id”
}
],
“可选”:正确,
“名称”:“test.public.test.Value”,
“字段”:“之后”
},
{
“类型”:“结构”,
“字段”:[
{
“类型”:“字符串”,
“可选”:false,
“字段”:“版本”
},
{
“类型”:“字符串”,
“可选”:false,
“字段”:“连接器”
},
{
“类型”:“字符串”,
“可选”:false,
“字段”:“名称”
},
{
“类型”:“int64”,
“可选”:false,
“字段”:“ts_ms”
},
{
“类型”:“字符串”,
“可选”:正确,
“名称”:“io.debezium.data.Enum”,
“版本”:1,
“参数”:{
“允许”:“正确、最后、错误”
},
“默认值”:“false”,
“字段”:“快照”
},
{
“类型”:“字符串”,
“可选”:false,
“字段”:“db”
},
{
“类型”:“字符串”,
“可选”:false,
“字段”:“架构”
},
{
“类型”:“字符串”,
“可选”:false,
“字段”:“表”
},
{
“类型”:“int64”,
“可选”:正确,
“字段”:“txId”
},
{
“类型”:“int64”,
“可选”:正确,
“字段”:“lsn”
},
{
“类型”:“int64”,
“可选”:正确,
“字段”:“xmin”
}
],
“可选”:false,
“名称”:“io.debezium.connector.postgresql.Source”,
“字段”:“源”
},
{
“类型”:“字符串”,
“可选”:false,
“字段”:“op”
},
{
“类型”:“int64”,
“可选”:正确,
“字段”:“ts_ms”
},
{
“类型”:“结构”,
“字段”:[
{
“类型”:“字符串”,
“可选”:false,
“字段”:“id”
},
{
“类型”:“int64”,
“可选”:false,
“字段”:“总订单”
},
{
“类型”:“int64”,
“可选”:false,
“字段”:“数据收集顺序”
}
],
“可选”:正确,
“字段”:“事务”
}
],
“可选”:false,
“名称”:“test.public.test.Envelope”
},
“有效载荷”:{
“之前”:空,
“之后”:{
“id”:4441,
“测试代码”:3606,
“测试c”:“QWERTY”,
“test_a_t”:空,
“测试p”:[
“qwe”,
“asd”,
“zxc”
],
“测试id”:22827
},
“来源”:{
“版本”:“1.2.2.最终版”,
“连接器”:“postgresql”,
“名称”:“测试”,
“ts_ms”:1599543319277,
“快照”:“假”,
“db”:“测试”,
“schema”:“public”,
“表”:“测试”,
“txId”:3914206,
“lsn”:108940649328,
“xmin”:空
},
“op”:“u”,
“ts_ms”:1599543319509,
“交易”:空
}
}
例:
大约有5-10%的数据不匹配,并且所有数据都只出现在20列中的2列中
有人知道是什么导致了这样的问题吗?您如何知道您正在比较正确的消息?例如,
test\u c\u id=22632
中是否有其他一些数据在test\u c\u id=3606
之后被追加?@OneCricketeer通过查找具有特定“id”:XXXX
的消息来查找这些数据。我的意思是,我很确定我看到的是正确的消息,所以我创建了第二个只包含一个主题的接收器连接器,它只在一个文件中工作。数据库中的数据与预期一样,即使它们都从同一个主题读取,我猜这与您的RegexRouter
设置有关,该设置正在多个数据库之间覆盖一些数据topics@OneCricketeer是的,问题似乎是因为RegexRouter
您如何知道您正在比较正确的消息?例如,test\u c\u id=22632
中是否有其他一些数据在test\u c\u id=3606
之后被追加?@OneCricketeer通过查找具有特定“id”:XXXX
的消息来查找这些数据。我的意思是,我很确定我看到的是正确的消息,所以我创建了第二个只包含一个主题的接收器连接器,它只在一个文件中工作。数据库中的数据与预期一样,即使它们都从同一个主题读取,我猜这与您的RegexRouter
设置有关,该设置正在多个数据库之间覆盖一些数据topics@OneCricketeer是的,问题似乎是因为RegexRouter
Kafka Sink DB
---------------------------------------
test_c_id: 3606 test_c_id: 22632
test_b_c: QWERTY test_b_c: null