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