我正在使用Python avro.io软件包对记录(字典)进行编码,因此可以将其发送到Kafka。我使用以下代码对记录进行编码:
def encode(record, schema):
bytes_writer = io.BytesIO()
encoder = avro.io.BinaryEncoder(bytes_writer)
record_schema = avro.schema.parse(schema)
writer = avro.io.DatumWriter(record_schema)
writer.write(record, encoder)
return bytes_writer.getvalue()
我让writer.write方法为我做模式/记录验证。如果记录与架构不匹配,则会引发AvroTypeException。它适用于所有情况,但有多余数据的情况除外。
我的测试架构如下:
{
"type": "record",
"doc": "Test schema",
"name": "test",
"fields":
[
{
"name": "event_id",
"type": "string"
},
{
"name": "source_ip",
"type": "string"
}
]
}
我正在尝试通过以下记录:
bad_event = {"event_id": "82be06d4-df37-414e-ae9d-03dcaecdf8d3",
"source_ip": "123.446.789.001",
"extra-junk": "seems like extra junk is okay" }
我发现的是,编码器不会在此记录上引发错误,而是仅截断了多余的字段。我希望它无效并引发异常。