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