我尝试为avro消息创建schema以添加到Kafka的schema注册表中。因为我从mongodb获得消息,所以消息的结构因消息而异。例如,某个字段在一个消息中存在,而在另一个消息中不存在。为此,我使用以下schema:
{
"name": "my_field"
"type": ["string", "null"]
}
但如果消息中没有“my_field”字段,则消息将被丢弃。这不是我需要的行为。我需要系统跳过此消息。我应该如何设置它?
我尝试为avro消息创建schema以添加到Kafka的schema注册表中。因为我从mongodb获得消息,所以消息的结构因消息而异。例如,某个字段在一个消息中存在,而在另一个消息中不存在。为此,我使用以下schema:
{
"name": "my_field"
"type": ["string", "null"]
}
但如果消息中没有“my_field”字段,则消息将被丢弃。这不是我需要的行为。我需要系统跳过此消息。我应该如何设置它?
2条答案
按热度按时间js4nwp541#
要在Avro中使字段可选,您可以将默认属性添加到模式定义中。
当类型是联合时,首先指定null是很重要的。
myzjeezk2#
不清楚什么是跳过消息。如果您捕获反序列化错误并忽略它们,则需要在使用者端处理这些错误,而不是在反序列化程序中处理。
Avro是严格结构化的,因此您的收藏也应该是如此。
如果您想处理任何随机数据,那么您将需要在Kafka中使用JSON,而不是Avro。否则,您需要向模式添加
default: null
字段。