繁体   English   中英

使用卡夫卡 jdbc 接收器连接器以普通 json 格式将数据加载到 postgresql

[英]Loading data in plain json format to postgresql using kafka jdbc sink connector

这是我之前的问题:- importing-json-data-into-postgres-using-kafka-jdbc-sink-connector

当我以模式和有效负载格式生成数据时,我能够加载 json 数据。 但是,对我来说,不可能将模式分配给每条记录。 因此,我开始寻找其他解决方案,并找到了 JsonConverter 的 Schema Inferencing 根据文档,我禁用了value.converter.schemas.enable并启用了value.converter.schemas.infer.enable但我仍然面临同样的错误

即,原因:org.apache.kafka.connect.errors.ConnectException:接收器连接器“load_test”配置为“delete.enabled=false”和“pk.mode=none”,因此需要具有非空结构的记录值和非空结构架构,但在 (topic='dup_emp',partition=0,offset=0,timestamp=1633066307312) 找到记录,其中 HashMap 值和 null 值架构。

我的配置:-

curl -X PUT http://localhost:8083/connectors/load_test/config \
-H "Content-Type: application/json" \
-d '{
 "connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
 "connection.url":"jdbc:postgresql://localhost:5432/somedb",
 "connection.user":"user",
 "connection.password":"passwd",
 "value.converter":"org.apache.kafka.connect.json.JsonConverter",
 "value.converter.schemas.enable":"false",
 "value.converter.schemas.infer.enable": "true",
 "tasks.max" : "1",
 "topics":"dup_emp",
 "table.name.format":"dup_emp",
 "insert.mode":"insert",
 "quote.sql.identifiers":"never"
}'

我已经通过sink_config_options这里根据我的理解,我需要使用 key 生成记录,其中 key 包含主键字段的结构,并且需要设置pk_mode:record_keydelete.enabled:true

如果我理解错误,请纠正我。 如果我的理解是正确的,我们如何使用 struct 类型的键(包含所有主键)生成记录,最后,如何使它成功地从主题中填充 postgres 中的数据。

不可能将模式分配给每条记录

那么就不可能使用这个连接器,因为它需要一个模式才能知道存在哪些字段和类型。

您链接到的 KIP 正在“讨论中”,具有未分配的开放 JIRA,未实施。

另一种方法是不使用 JSON,而是使用结构化二进制格式,例如 Confluent 提供的格式(Avro 或 Protobuf)。 您可以 在使用 Connect 之前使用 KSQL 进行此转换(需要运行 Confluent Schema Registry)

否则,您需要编写自己的转换器(或转换)并将其添加到 Connect 类路径,以便它返回一个 Struct

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM