Confluent Kafka Python Schema解析与fastavro冲突及文档疑问
问题1解答
- 你的调用方式没有问题,该问题是Confluent Kafka 1.7.0版本设计与fastavro的兼容性问题,不属于使用错误。
- Confluent Kafka 1.7.0版本中
AvroSchema.to_json()方法为了避免用户修改缓存的schema数据,返回的嵌套结构中使用了不可变的MappingProxyType类型,而fastavro的validate和parse_schema方法要求传入的schema必须是普通dict类型,内部逻辑对类型校验要求严格,因此会抛出异常,不属于Confluent Kafka的功能bug。 - 你目前使用的递归转换方法完全可用,另外还有两种可选解决方案:
- 直接通过JSON序列化反序列化完成转换,代码更简洁:
schemaDict = json.loads(json.dumps(schema.to_json())),效果和你写的转换函数一致 - 升级Confluent Kafka到1.9.0及以上版本,后续版本已经调整了
to_json()方法的实现,返回结构全部为普通dict,无需额外转换即可直接传入fastavro使用
- 直接通过JSON序列化反序列化完成转换,代码更简洁:
问题2解答
- 该问题属于官方文档笔误,你的调用方式没有任何问题。
- Kafka Schema Registry的原生设计中,schema_id就是自增的整数类型,Confluent Kafka所有与schema_id相关的接口实现中,返回值和入参的实际类型都是int,和
encode_record_with_schema_id方法的参数要求完全匹配。官方旧版文档中对get_latest_schema()返回的schemaId类型标注错误,后续版本的文档已经修正了该标注。
内容的提问来源于stack exchange,提问作者gt6989b
相关产品推荐
相关产品推荐

