【发布时间】:2020-06-28 19:17:29
【问题描述】:
我刚刚读到 Flink 作业的最大并行度(由 setMaxParallelism 定义)不能在不丢失状态的情况下更改。这让我有点吃惊,不难想象一个人开始运行作业,却发现负载最终比预期大 10 倍(或者代码的效率低于预期)导致希望增加并行度。
除了一些对关键组的引用之外,我找不到很多原因。我发现的最有形的陈述here:
在扩展作业时不能改变最大并行度,因为它会破坏键到键组的映射。
但是,这仍然给我留下了一些问题:
为什么让工作改变其最大并行度很难/不可能?
基于上述,我想到了以下概念性解决方案:
- 在状态中,跟踪上次使用的最大并行度
- 开始作业时,指明所需的最大并行度
- 鉴于这两个设置都是已知的,应该可以推断出映射需要如何更改才能保持初始有效。
- 如果需要,可以使用新的 maxparallelism 基于旧状态定义新状态,以“适应”新作业。
我并不是说这个概念性解决方案是理想的,或者说实施起来很简单。我只是想知道最大并行度的非常严格的性质是否还有更多。并试图理解这是否只是“这种灵活性尚未实现”或“这与 Flink 的本质相悖,以至于人们不应该想要它”的问题。
【问题讨论】:
标签: parallel-processing apache-flink flink-streaming