用例是将整个消息(json)和键作为记录存储在表中,表中有两列“id”和“data”。
数据库为postgres,支持json列类型。
根据本文,jsonconverter中支持的类型是string、int64等https://cwiki.apache.org/confluence/display/kafka/kip-301%3a+schema+inferencing+for+jsonconverter
是否可以将数据字段的类型设置为json,然后将其存储在postgres db中,列的类型为json。
schema = `{
"type":"struct",
"fields":[
{"type":"string", "optional": false, "field":"id"},
{"type":"string", "optional": false, "field":"data"}
]}`
示例数据有效负载为
"payload": { "id": 10000, "data": {"hello":"world"} }
上面将数据存储为文本,并期望列在postgres中为文本类型。如果postgres上的列是json类型,那么jdbc接收器连接器将抛出一个错误。
在postgres上使用json类型将有助于在json字段上创建索引等等。是否可以将jsonconverter与jdbc sink converter一起适当地用于存储列类型为json的记录。
2条答案
按热度按时间idfiyjo81#
使用
value.converter.schema.enable=true
,并发送类似这样的json数据(将模式作为每条消息的一部分,并更新payload
节),它应该与jdbc接收器一起工作。或者你可以考虑把你的客户机转换成使用avro,并为自己节省一些网络带宽。
pzfprimi2#
jdbc接收器连接器不支持postgresql json、jsonb类型。它支持许多基本类型,datetimes。
在下一页中,您可以找到将架构类型Map到数据库类型(postgresql)https://docs.confluent.io/5.1.0/connect/kafka-connect-jdbc/sink-connector/index.html
尽管jdbc源连接器支持json,但某些部分列中的jsonb类型不会Map到
STRUCT
,但将Map到STRING
类型。