Avro是什么?
Apache Avro是一个数据序列化工具,主要用于将类对象或其它结构形式的数据转化为用于传输的通用的格式,如二进制、json、xml等,并且它是跨语言支持的。
为什么会有Avro?
先来看下传统的RPC的情况,在跨平台和跨语言的情况下,模块之间的交互和调用过程如下图:
单纯的看就是序列化和反序列化的问题,发送端将对象序列化为二进制格式的数据,然后接收端反序列化接收到的二进制数据,恢复对象。可这个过程需要解决以下问题
1、序列化问题: 使用什么方法将对象序列化为用于传输的通用的格式,如二进制、json、xml。
2、类型问题: 不同语言的数据类型的差异。
3、调用问题: 不同语言的方法调用的差异。
这个过程对于不同的RPC 调用都需要编写不同的发送端和接收端的代码,且使用时也较为复杂。
接着WebService的出现解决了上述问题,它不再需要提供各种不同的序列化和反序列化操作,而是提供一种通用的,任何机器都可以理解的文本语言,如XML、JSON、SOAP协议等,以及后来的基于Http协议的Restful WebService,也是类似的思路,只是角度不同,是操作最简化了。
但当大数据时代到来时,大家发现基于XML,甚至JSON的文本协议的方案的传输效率成了瓶颈,于是Google和Facebook,又开始研究基于二进制的RPC方案,才产生了PB、Thrift、Avro等这些中间件。
参考http://www.cnblogs.com/fxjwind/archive/2013/05/16/3082219.html
Avro的功能特点
它支持多种语言、具有丰富的数据类型、具有动态的Schema、支持排序、主要用于Hadoop的MapReduce编程。
优缺点
Avro最大的特点就是动态schema, schema变化后不需要重新编译client和server的代码;再加上Hadoop的结合。缺点是使用起来较复杂。
另详见:http://blog.csdn.net/qiruiduni/article/details/49250225#t0