关于Apache-Flink中数据交换的质疑


0

翻阅一本关于 Apache· Flink的书,书中有以下内容:

如果发送方任务和接收方任务在同一个TaskManager进程中运行,则发送方

如果发送方和接收方都在同一个JVM进程中,为什么需要序列化?

1 答案


0

有几个原因,但让我们退一步,讨论一下操作 chaining。

如果两个连续的运算符具有相同的并行度,只有一个输入/输出,共享一个任务槽,并且还公开某些属性(例如,他们说可以 chaining接),则可以使用运算符 chaining。最简单的 chaining就是一系列 map 。但它也可以是source->map->sink,可以完全 chaining接。 chaining中的记录不会序列化,而是被复制(除非已设置enableObjectReuse)。我想这正是你对连载感到惊讶时的想法。

例如,如果您有多个输入或显式网络 shuffle,则运营商 chaining断开。对于 join,两者都是正确的。所以数据被序列化。但是,在同一个TM上仍然可以有两个连续的子任务。这就是 local输入通道发挥作用的地方,与你所发现的相一致。在 local输入通道上的序列化使处理背压和 checkpoints比在给定步骤中某些记录被序列化而其他记录不序列化要容易得多。


我来回答

写文章

提问题

面试题