Kafka JDBC Sink连接器后数据不匹配

时间:2020-09-09 06:12:29

标签: postgresql jdbc apache-kafka apache-kafka-connect debezium

尝试使用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"
    }
}

kafka主题内的消息:

{ “模式”:{ “ type”:“ struct”, “字段”:[ { “ type”:“ struct”, “字段”:[ { “ type”:“ int64”, “可选”:false, “ field”:“ id” }, { “ type”:“ int64”, “可选”:true, “ field”:“ test_c_id” }, { “ type”:“ string”, “可选”:true, “ field”:“ test_b_c” }, { “ type”:“ string”, “可选”:true, “ field”:“ test_a_t” }, { “ type”:“ array”, “项目”:{ “ type”:“ string”, “可选”:true }, “可选”:true, “ field”:“ test_p” }, { “ type”:“ int64”, “可选”:true, “ field”:“ test_d_id” } ], “可选”:true, “ name”:“ test.public.test.Value”, “ field”:“之前” }, { “ type”:“ struct”, “字段”:[ { “ type”:“ int64”, “可选”:false, “ field”:“ id” }, { “ type”:“ int64”, “可选”:true, “ field”:“ test_c_id” }, { “ type”:“ string”, “可选”:true, “ field”:“ test_b_c” }, { “ type”:“ string”, “可选”:true, “ field”:“ test_a_t” }, { “ type”:“ array”, “项目”:{ “ type”:“ string”, “可选”:true }, “可选”:true, “ field”:“ test_p” }, { “ type”:“ int64”, “可选”:true, “ field”:“ test_d_id” } ], “可选”:true, “ name”:“ test.public.test.Value”, “ field”:“之后” }, { “ type”:“ struct”, “字段”:[ { “ type”:“ string”, “可选”:false, “ field”:“版本” }, { “ type”:“ string”, “可选”:false, “ field”:“连接器” }, { “ type”:“ string”, “可选”:false, “ field”:“名称” }, { “ type”:“ int64”, “可选”:false, “ field”:“ ts_ms” }, { “ type”:“ string”, “可选”:true, “ name”:“ io.debezium.data.Enum”, “版本”:1, “参数”:{ “ allowed”:“ true,last,false” }, “ default”:“ false”, “ field”:“快照” }, { “ type”:“ string”, “可选”:false, “ field”:“ db” }, { “ type”:“ string”, “可选”:false, “ field”:“ schema” }, { “ type”:“ string”, “可选”:false, “ field”:“ table” }, { “ type”:“ int64”, “可选”:true, “ field”:“ txId” }, { “ type”:“ int64”, “可选”:true, “ field”:“ lsn” }, { “ type”:“ int64”, “可选”:true, “ field”:“ xmin” } ], “可选”:false, “ name”:“ io.debezium.connector.postgresql.Source”, “ field”:“ source” }, { “ type”:“ string”, “可选”:false, “ field”:“ op” }, { “ type”:“ int64”, “可选”:true, “ field”:“ ts_ms” }, { “ type”:“ struct”, “字段”:[ { “ type”:“ string”, “可选”:false, “ field”:“ id” }, { “ type”:“ int64”, “可选”:false, “ field”:“ total_order” }, { “ type”:“ int64”, “可选”:false, “ field”:“ data_collection_order” } ], “可选”:true, “ field”:“交易” } ], “可选”:false, “ name”:“ test.public.test.Envelope” }, “有效载荷”:{ “之前”:null, “之后”:{ “ id”:4441, “ test_c_id”:3606, “ test_b_c”:“ QWERTY”, “ test_a_t”:null, “ test_p”:[ “ qwe”, “ asd”, “ zxc” ], “ test_d_id”:22827 }, “资源”: { “ version”:“ 1.2.2.Final”, “ connector”:“ postgresql”, “ name”:“ test”, “ ts_ms”:1599543319277, “ snapshot”:“ false”, “ db”:“测试”, “ schema”:“ public”, “ table”:“ test”, “ txId”:3914206, “ lsn”:108940649328, “ xmin”:null }, “ op”:“ u”, “ ts_ms”:1599543319509, “交易”:null } }

例如:

Kafka                  Sink DB
---------------------------------------
test_c_id: 3606        test_c_id: 22632
test_b_c: QWERTY       test_b_c: null

大约5-10%的数据不匹配,并且所有数据仅出现在20列中的2列中。

有人知道什么可能导致这种问题吗?

0 个答案:

没有答案