首页 > 解决方案 > 在对象类型与静态类型之间进行序列化时的性能差异

问题描述

当要序列化时,我们是否需要静态类型/声明变量的数据类型?它在序列化时会提高任何性能吗?

我正在为批处理创建一个 flink 项目。我编写了一个自定义输入阅读器,它将通过 jdbc 从数据库中读取,并以 Hashmap 的形式返回一条记录,其中包含列名和值。我知道 Flink 在每个子任务之间序列化对象。所以,我的问题是,由于我有 hashmap 类型的值,它对序列化性能有什么影响吗?

Flink 默认使用 kyro 序列化器

标签: javaserializationapache-flinkflink-batch

解决方案


hashmap 的序列化和反序列化是昂贵的。例如,如果您可以使用 Tuples 或 Rows 来完成这项工作,那么效果会更好。或者您可能会考虑实现自定义表源,然后利用表/SQL API 及其优化。

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

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


推荐阅读