Avro Schema格式

Avro Schema格式

Avro是一个数据序列化系统,主要用于支持大批量数据交换的应用。

特点:

  • 支持二进制序列化方式,可以便捷、快速的处理大量数据;
  • 动态语言有好,Avro提供的机制使动态语言可以方便的处理Avro数据

1.Avro Schema结构

{
    "type":"record",
    "name":"aaa",
    "namespace":"bbb",
    "fields":[
        {
            "name":"ccc",
            "type":"int",
            "doc":"ccc",
            "default":0
        },
        {
            "name":"ddd",
            "type":"string",
            "doc":"ddd",
            "default":""
        }
    ]
}
  • “type”: “record” 必须栏位
  • “name”: “aaa” 必须栏位,记录名
  • “namespace”: “bbb” 包名
  • “fields”: [] 必须栏位,列举所有属性,是json数组
    • “name”:“ccc” 必须栏位,属性名
    • “type”:“int” 必须栏位,属性类型
    • “doc”:“ccc” 属性文档
    • “default”:0 属性默认值,需要对应属性类型

2.简单数据类型

类型 说明
null 没有值
boolean 布尔值
int 32位有符号整数
long 64位有符号整数
float 单精度(32位)的IEEE 754浮点数
double 双精度(64位)的IEEE 754浮点数
bytes 8位无符号字节序列
string 字符串

3.复杂数据类型

1).Array

{
    "type":"record",
    "name":"aaa",
    "namespace":"bbb",
    "fields":[
        {
            "name":"ccc",
            "type":{
                "type": "array",
                "items": "string",
                "default": []
            }
        }
    ]
}

“items”: “string” array中元素的数据类型

2).Record

{
    "name":"aaa",
    "default":null,
    "type":[
        "null",
        {
            "type":"array",
            "default":[],
            "items":{
                "name":"bbb",
                "type":"record",
                "fields":[
                    {
                        "name":"ccc",
                        "type":"string",
                        "doc":"ccc",
                        "default":""
                    },
                    {
                        "name":"ddd",
                        "type":"string",
                        "doc":"ddd",
                        "default":""
                    }
                ]
            }
        }
    ]
}

示例为array和record嵌套使用,适用于一个对象的元素包含其他对象的场景

3).Enum

{
    "type":"record",
    "name":"aaa",
    "namespace":"bbb",
    "fields":[
        {
            "name":"ccc",
            "type":"enum",
            "symbols":["0","1","2"]
        }
    ]
}

symbols:字符串数组,所有的枚举值(必填),不允许重复数据

4).Map

{
    "type":"record",
    "name":"aaa",
    "namespace":"bbb",
    "fields":[
        {
            "name":"ccc",
            "type":"map",
            "values":"long"
        }
    ]
}

map的key必须是string,示例为一个key为string,value为long的map

5).Union

组合类型,表示各种类型的组合,使用数组进行组合。比如[“null”, “string”]表示类型可以为null或者string。

Unions不能包含多个相同类型的Schema,除非是命名的record类型、命名的fixed类型和命名的enum类型。比如,如果unions中包含两个array类型,或者包含两个map类型都不允许;但是两个具有不同name的相同类型却可以。

6).Fixed

{
    "type":"record",
    "name":"aaa",
    "namespace":"bbb",
    "fields":[
        {
            "name":"ccc",
            "type":"fixed",
            "size":16
        }
    ]
}

size指声明的fixed类型数据为16字节

你可能感兴趣的:(Kafka)