iidr-cdc-kafka消息格式

n3h0vuf2  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(452)

我们正在将表数据从db2发送到iidr cdc,再发送到kafka。当您看到kafka avro console consumer中的消息时,kafka主题中的数据格式有问题。
对于定义为default null的db2列,如果它们的值为null,则在kafka主题中看起来很好(如下所示)key:value) . 但当值不为null时,它将被 Package 在字典中。
列为-

"Random_key": {
    "int": 9088245671
  }

这里,该条目的键是列的数据类型,值是列值。-->这种输出格式不适合我们的应用程序
如果值实际为null,并且列定义为default null,则看起来很好。正如所料-

"Random_key": null

我们如何在iidr cdc或kafka侧进行更改,以便始终在中显示消息key:value format ,如下所示-(即使默认null列中包含某个值)

"Random_key": 9088245671

谢谢!

zf2sa74q

zf2sa74q1#

这很正常,这意味着 Random_key 是类型的avro记录 Union . 带着一个 union 类型您必须设置一个与联合类型匹配的默认值,并且在您的情况下,您的cdc被解释为数据库字段模式约束 union { null, int} .
当字段不为null时,意味着它是一个整数,而在avro中,当它是并集时,必须指定相应的类型。想象一下如果你有这个: union {string, int, double} . 这里的字段是正确的,当它是一个字符串,一个整数或一个双精度,但我们想知道每个字段什么是真正的数据类型。
不幸的是,这是正确的行为,但通常你并不在乎。 avro-console-consumer 使用json序列化程序打印数据以便能够读取。在您的代码中,字段数据类型将被正确地解释为您想要的类型。
编辑:如果您的业务绝对需要一个json格式的记录,那么有一个人想用更易阅读的json来更改表示形式,并开发了一套编码器/解码器来代替默认值:
https://github.com/zolyfarkas/avro/commit/8926d6e9384eb3e7d95f05a9d1653ba9348f1966

相关问题