Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何处理卡夫卡中的动态消息值?_Postgresql_Jdbc_Apache Kafka_Apache Kafka Connect - Fatal编程技术网

Postgresql 如何处理卡夫卡中的动态消息值?

Postgresql 如何处理卡夫卡中的动态消息值?,postgresql,jdbc,apache-kafka,apache-kafka-connect,Postgresql,Jdbc,Apache Kafka,Apache Kafka Connect,我很难实现卡夫卡的动态消息值功能。我正在使用confluent kafka python中的AvroProducer以及schema registry。制作人将以如下格式发送消息: {'id':1, 'name':'A', 'properties': {'key1': 'value1', 'key2': 'value2', 'key2': 'value3'}}, {'id': 2, 'name': 'X', 'properties': {'key1': 'value1'}} 属性在不同消息之

我很难实现卡夫卡的动态消息值功能。我正在使用
confluent kafka python
中的
AvroProducer
以及
schema registry
。制作人将以如下格式发送消息:

{'id':1, 'name':'A', 'properties': {'key1': 'value1', 'key2': 'value2', 'key2': 'value3'}},
{'id': 2, 'name': 'X', 'properties': {'key1': 'value1'}} 
属性在不同消息之间可能有所不同。因此,有些可能有更多的键、值对,而有些可能有更少的键、值对。我正在尝试使用Kafka connect将此消息从Kafka发送到
postgresql
。我希望
properties
成为
json
输入
postgresql
数据库


如何做到这一点?任何指点都将非常感激。谢谢

对于您的示例,一个声明数组的模式就足够了。例如,在AVRO中,模式定义如下所示:

{
    "name": "MyRecord",
    "type":"record",
    "fields":[
        {
            "name":"id",
            "type":"long"
        },
        {
            "name":"name",
            "type":"string"
        },
        {
            "name":"properties",
            "type": "array",  
             "items":{
                    "name":"mykvprop",
                    "type":"record",
                    "fields":[
                        {
                          "name":"key", 
                          "type":"string"
                        },
                        {
                          "name":"value", 
                          "type":"string"
                        }
                    ]
                }
        }
    ] 
}
如果您的消息因数据类型而异,那么您需要一个更复杂的解决方案,使用AVRO联合、多模式主题或两者兼有。例如,如果属性数组的键和值不是全部字符串。更多信息:


如果使用Kafka Connect API而不是Kafka Producer API,这些高级情况会变得复杂,因为Connect API的内部模式似乎限制了您的选择。

对于您的示例,一个声明数组的模式就足够了。例如,在AVRO中,模式定义如下所示:

{
    "name": "MyRecord",
    "type":"record",
    "fields":[
        {
            "name":"id",
            "type":"long"
        },
        {
            "name":"name",
            "type":"string"
        },
        {
            "name":"properties",
            "type": "array",  
             "items":{
                    "name":"mykvprop",
                    "type":"record",
                    "fields":[
                        {
                          "name":"key", 
                          "type":"string"
                        },
                        {
                          "name":"value", 
                          "type":"string"
                        }
                    ]
                }
        }
    ] 
}
如果您的消息因数据类型而异,那么您需要一个更复杂的解决方案,使用AVRO联合、多模式主题或两者兼有。例如,如果属性数组的键和值不是全部字符串。更多信息:

如果使用Kafka Connect API而不是Kafka Producer API,这些高级情况会变得复杂,因为Connect API的内部模式似乎会限制您的选项