在对象类型与静态类型之间进行序列化时的性能差异

Performance difference when doing a serialization between type of object vs statically typed

我们是否需要在序列化时静态type/declare变量的数据类型?它在序列化时会提高性能吗?

我正在创建一个用于批处理的 flink 项目。我写了一个自定义输入 reader,它将通过 jdbc 和 returns 从数据库中读取一条记录作为 Hashmap,包含列名和值。我知道 Flink 序列化每个子任务之间的对象。所以,我的问题是,因为我有 hashmap where values of type object,它对序列化性能有什么影响吗?

Flink 默认使用 kyro 序列化器

哈希图的序列化和反序列化非常昂贵。例如,如果您可以使用 Tuples 或 Rows 进行这项工作,那会表现得更好。或者您可以考虑实施自定义 Table 源,然后利用 Table/SQL API 及其优化。

最近在 Apache Flink 博客上有一篇文章提供了有关序列化的详细信息,包括有关性能的部分。我推荐整篇文章,但有关性能结果,请参阅 https://flink.apache.org/news/2020/04/15/flink-serialization-tuning-vol-1.html#performance-comparison。您的结果肯定会与那篇文章中显示的结果不同——序列化性能会根据您正在做的事情的细节而有很大差异——但那里显示的一般模式值得关注。

很难说你从担心这一切中得到了多少。您必须自己进行基准测试才能确定。至于你关于静态类型的问题——我不确定,但我的猜测是,使用 Kryo 不会有太大区别。

感谢@David Anderson,这篇文章非常有用。我使用 rows 来获得更好的性能,它在内部使用 object []。静态类型对象与类型对象没有性能差异。与 kryo 一样,它没有任何区别