Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
Apache kafka IIDR CDC卡夫卡消息格式_Apache Kafka_Db2_Confluent Platform_Cdc_Ibm Data Replication - Fatal编程技术网

Apache kafka IIDR CDC卡夫卡消息格式

Apache kafka IIDR CDC卡夫卡消息格式,apache-kafka,db2,confluent-platform,cdc,ibm-data-replication,Apache Kafka,Db2,Confluent Platform,Cdc,Ibm Data Replication,我们正在将表数据从db2发送到iidr cdc,再发送到kafka。当您在Kafka avro console consumer中看到消息时,Kafka主题中的数据格式出现问题 对于定义为默认NULL的Db2列,如果它们的值为NULL,则在kafka主题中(作为key:value)看起来很好。但当值不为null时,它将被包装在字典中 如果列为- "Random_key": { "int": 9088245671 } 这里,该条目的键是列的数据类型,值是列值。-->这种输出格式不适合

我们正在将表数据从db2发送到iidr cdc,再发送到kafka。当您在Kafka avro console consumer中看到消息时,Kafka主题中的数据格式出现问题

对于定义为默认NULL的Db2列,如果它们的值为NULL,则在kafka主题中(作为key:value)看起来很好。但当值不为null时,它将被包装在字典中

如果列为-

"Random_key": {
    "int": 9088245671
  }
这里,该条目的键是列的数据类型,值是列值。-->这种输出格式不适合我们的应用程序

如果该值实际上为null,并且列定义为默认null,则看起来很好。正如所料-

我们如何在IIDR CDC或KAFKA端进行更改,以始终以key:value格式显示消息,如下所示- (即使默认NULL列中包含某些值)


谢谢

这是正常的,这意味着字段
随机键
是类型为
Union
的avro记录。 对于
联合
类型,您必须设置与联合类型匹配的默认值,并且在您的情况下,您的CDC被解释为数据库字段模式约束为
联合{null,int}

当字段不为null时,表示它是一个整数,在avro中,当它是一个并集时,必须指定相应的类型。 想象一下,如果你有这样一个:
union{string,int,double}
。这里的字段是正确的,当它是字符串、整数或双精度时,但是我们想知道每个字段的数据的真实类型

不幸的是,这是正确的行为,但通常你并不在意。
avro控制台消费者
使用json序列化程序打印数据,以便您能够读取数据。在您的代码中,字段数据类型将按照您希望的方式正确解释

编辑: 如果您的业务绝对需要json格式的记录,那么有一个人想用更易于阅读的json来更改表示,并开发了一套编码器/解码器,以替代默认的:


让我问一下你的申请是什么?卡夫卡河?卡夫卡客户端api(生产者/消费者)?卡夫卡客户端api。到目前为止,我们正在测试主题中的数据,发现奇怪的列只在定义为“default null”的列中产生。好的,通常情况下,如果您使用客户机API或任何其他带有java/scala的API,您的数据类型将被正确解释(java中的任何非原语类型都可以为null)因此,您不会因此而出现问题。请注意,这只是json中avro记录的表示!我刚刚编辑了我的答案,如果您需要以json格式发送avro记录,但我坚持认为,如果您不需要以json格式发送消息,那么没有问题,这只是控制台中的一种显示格式。
 "Random_key": null 
"Random_key": 9088245671