Kafka avro方案中缺少字段

14ifxucb  于 2022-12-11  发布在  Apache
关注(0)|答案(2)|浏览(146)

我尝试为avro消息创建schema以添加到Kafka的schema注册表中。因为我从mongodb获得消息,所以消息的结构因消息而异。例如,某个字段在一个消息中存在,而在另一个消息中不存在。为此,我使用以下schema:

{
   "name": "my_field"
   "type": ["string", "null"]
}

但如果消息中没有“my_field”字段,则消息将被丢弃。这不是我需要的行为。我需要系统跳过此消息。我应该如何设置它?

js4nwp54

js4nwp541#

要在Avro中使字段可选,您可以将默认属性添加到模式定义中。

{
   "name": "my_field"
   "type": ["null", "string"],
   "default": null
}

当类型是联合时,首先指定null是很重要的。

myzjeezk

myzjeezk2#

不清楚什么是跳过消息。如果您捕获反序列化错误并忽略它们,则需要在使用者端处理这些错误,而不是在反序列化程序中处理。
Avro是严格结构化的,因此您的收藏也应该是如此。
如果您想处理任何随机数据,那么您将需要在Kafka中使用JSON,而不是Avro。否则,您需要向模式添加default: null字段。

相关问题