java 序列化与 kryo 序列化的优缺点是什么?

What are the pros and cons of java serialization vs kryo serialization?

在 spark 中,java 序列化是默认的,如果 kryo 如此高效,那么为什么不将其设置为默认。使用 kryo 有什么缺点,或者在什么情况下我们应该使用 kryo 或 java 序列化?

这是来自 documentation 的评论:

Kryo is significantly faster and more compact than Java serialization (often as much as 10x), but does not support all Serializable types and requires you to register the classes you’ll use in the program in advance for best performance.

所以默认不使用因为:

  1. 并非每个 java.io.Serializable 都支持开箱即用 - 如果您有自定义 class 扩展 Serializable 它仍然无法使用 Kryo 序列化,除非已注册。
  2. 需要注册自定义 classes.

根据documentation注释:

Spark automatically includes Kryo serializers for the many commonly-used core Scala classes covered in the AllScalaRegistrar from the Twitter chill library.

克里奥 优点:内存消耗低

当我处理 google protobufs 时,kryo 对我不起作用。那是我必须首先注册原型的时候 class

https://mvnrepository.com/artifact/de.javakaffee/kryo-serializers/0.45