我们需要静态类型化/声明变量的数据类型吗?它在序列化时是否提高了性能?
我正在创建一个用于批处理的flink项目。我编写了一个自定义输入读取器,它将通过jdbc从数据库中读取数据,并返回一个记录作为hashmap,其中包含列名和值。我知道flink在每个子任务之间序列化对象。所以,我的问题是,既然我有hashmap类型object的值在哪里,它对序列化性能有影响吗?
flink默认使用kyro序列化程序
我们需要静态类型化/声明变量的数据类型吗?它在序列化时是否提高了性能?
我正在创建一个用于批处理的flink项目。我编写了一个自定义输入读取器,它将通过jdbc从数据库中读取数据,并返回一个记录作为hashmap,其中包含列名和值。我知道flink在每个子任务之间序列化对象。所以,我的问题是,既然我有hashmap类型object的值在哪里,它对序列化性能有影响吗?
flink默认使用kyro序列化程序
2条答案
按热度按时间u4dcyp6a1#
谢谢@david anderson,这篇文章很有用。我使用行来获得更好的性能,它在内部使用object[]。静态类型对象和类型对象的性能没有区别。和kryo一样,这没有什么区别
jk9hmnmh2#
哈希Map的序列化和反序列化代价很高。例如,如果您可以使用元组或行来实现这一点,那么它的性能会更好。或者您可以考虑实现一个自定义表源,然后利用table/sqlapi及其优化。
apacheflink博客上最近有一篇文章提供了有关序列化的详细信息,其中包括关于性能的一节。我推荐整篇文章,但有关性能结果,请参阅https://flink.apache.org/news/2020/04/15/flink-serialization-tuning-vol-1.html#performance-比较。您的结果肯定会与那篇文章中显示的结果不同——序列化性能会因您所做工作的细节而有很大差异——但是这里显示的一般模式值得注意。
很难说你到底从担心这一切中得到了多少。你必须做你自己的基准来确定。至于你关于静态输入的问题——我不确定,但我猜对于kryo来说不会有太大的区别。