写在前面

本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定大数据理论体系

解答

分布式系统中常用的序列化框架有Apache Thrift,Google Protocol Buffers,Apache Avro,这 3 个都是"Language Of Data”。
它们通过引入 schema,使得数据跨语言序列化变得非常高效,同时提供了代码生成工具,为用户自动生成各种语言的代码。
除了以上 3 种以外,Kryo也是大数据框架中经常使用的序列化框架,不过Kryo是针对Java Object的序列化,对于跨语言方面是不支持的,但是很多场景中比如RPC,Cache,Store场景中一般很少需要对跨语言的支持。因此,Kryo的适用场景也很不错。

补充

“Language Of Data”具备以下基本特征

  1. 提供IDL(Interface Description language)用以描述数据 schema,能够很容易地描述任意结构化数据和非结构化数据。
  2. 支持跨语言读写,至少支持C++、Java和 Python三种主流语言。
  3. 数据编码存储(整数可采用变长编码,字符串可采用压缩编码等),以尽可能避免不必要的存储浪费。
  4. 支持 schema演化,即允许按照一定规则修改数据的 schema,仍可保证读写模块向前向后的兼容性。

Apache Thrift

详情请参考我的另一篇博客——Apache Thrift是什么?

Google Protocol Buffers(Protobuf)

详情请参考我的另一篇博客——Protobuf是什么?

Apache Avro

详情请参考我的另一篇博客——Apache Avro是什么?

Kryo

详情请参考我的另一篇博客——Kryo是什么?

Q.E.D.


大数据开发工程师,精通 Spark,擅长 Java 和 Scala