如何使用avrogen编译包含引用的avsc文件生成Avro schema
错误原因分析
- 第一个avsc文件本身格式不合法:提供的片段缺少外层
{}包裹,根节点未声明type: record,字段数组也未正确闭合 - 跨文件引用自定义类型时未指定完整命名空间:第二个文件中
AnalogProperty的命名空间为Kafka.AvroSchemas,第一个文件直接写短名AnalogProperty无法被识别 - 执行avrogen编译时未传入所有依赖的avsc文件,工具无法加载被引用的类型定义
修复步骤
1. 修复第一个avsc文件的格式和引用逻辑
{ "doc": "Measurement Type, Analog or Discrete", "name": "AnalogProperties", "namespace": "Kafka.AvroSchemas", "type": "record", "fields": [ { "doc": "", "name": "RealPower", "type": "Kafka.AvroSchemas.AnalogProperty" } ] }
如果已经将第一个文件的namespace设为和第二个文件一致的Kafka.AvroSchemas,type字段也可以直接写AnalogProperty,无需带全路径
2. 修复第二个avsc文件的语法问题
原文件中fields数组最后一个字段后多了多余逗号,严格的Avro解析器会识别为语法错误,删除多余逗号即可。
3. 调整avrogen编译命令
编译时需要把所有依赖的avsc文件都传入参数,且需要把被依赖的类型定义文件放在前面,示例命令:avrogen -s .\第二个文件.avsc .\第一个文件.avsc .\代码输出目录
内容的提问来源于stack exchange,提问作者Victor Silva
相关产品推荐
相关产品推荐

