0

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

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

Flink 默认使用 kyro 序列化器

4

2 回答 2

1

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

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

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

于 2020-05-06T19:43:53.990 回答
0

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

于 2020-05-10T05:18:37.503 回答