首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"rescale()“操作会导致序列化吗?

"rescale()“操作会导致序列化吗?
EN

Stack Overflow用户
提问于 2022-08-02 01:39:29
回答 1查看 72关注 0票数 0

如果我在Flink中调用一个rescale()操作,我假设没有序列化/反序列化(因为数据不是跨节点的),对吗?此外,当调用rescale()时,假定对象没有被复制/深度复制是正确的吗?

我之所以这样问,是因为我传递了一些大型对象,其中99%在多个线程之间是常见的,因此,如果对象在rescale()之后在每个线程中被回收,这将是巨大的内存浪费。相反,所有不同的线程都应该指向该节点的java堆中的同一个对象。

(当然,如果我调用一个rebalance,那么即使在其他节点上有几十个线程,也会有一个公共对象序列化到其他节点?)也就是说,在其他节点上,应该只有一个公共对象的副本,该节点的所有线程都可以共享这个副本,对吗?)

EN

回答 1

Stack Overflow用户

发布于 2022-08-02 14:47:05

根据重碱()文档,将出现网络通信量(因此也会出现序列化/反序列化),只是不像rebalance()那样多。但是,正如一些Flink提交者所指出的,与不平衡的数据相比,数据倾斜可以使网络流量的减少变得微不足道,这就是为什么当流拓扑发生变化时,rebalance()是默认操作。

另外,如果您正在传递大量公共数据,那么也许可以考虑使用广播流来更有效地在节点间共享这些数据。

最后,在概念上更容易考虑子任务与线程之间的关系。每个操作符作为子任务运行,这个子任务(在一个任务管理器上)确实是线程化的,但是操作符实例是独立的,这意味着您不必担心操作符级别的多线程(除非您使用类变量,这通常是一个糟糕的想法)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73201150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档