使用Avro

一直听说avro不同于thrift,在hadoop,hbase广泛使用,逐渐替代了原来thrift的使用,就很好奇它有什么好处.

今天抽时间玩了一下,和大家分享下.

目前版本是1.7.6,其schema使用JSON,在RPC中客户端与服务器端在handshake时交换schema信息,而其rpc可以是http方式,也可以是netty2方式.

与thrift,protocol buffer区别在几方面:

1.Dynamic typing: 不必需生成代码(生成代码只是优化选项)

2.Untagged data: 因为schema已经有了,所以数据中只需较少类型信息.

3.No mannually-assigned field ids:因为schema是按field name描述的,不是按field id描述

logo挺有意思的,

这么看的确比thrift和proto buffer更好用哈.

查看github上的avro rpc quickstart项目,可以看到使用比较简单,avro rpc的描述文件是这样的:

{"namespace": "example.proto",
 "protocol": "Mail",


 "types": [
     {"name": "Message", "type": "record",
      "fields": [
          {"name": "to",   "type": "string"},
          {"name": "from", "type": "string"},
          {"name": "body", "type": "string"}
      ]   
     }   
 ],


 "messages": {
     "send": {
         "request": [{"name": "message", "type": "Message"}],
         "response": "string"
     }   
 }
}

这里java的例子用的是生成代码的方式,需要使用maven的avro-maven-plugin插件.在Main.java中同时启动了server和client,可以看出rpc使用的是netty2.

python的例子使用的是http方式进行rpc,并且不生成代码,直接parse mail.avro文件.


参考:

http://avro.apache.org/docs/current/

https://github.com/phunt/avro-rpc-quickstart


你可能感兴趣的:(thrift,rpc,avro,protobuffer)