【发布时间】:2022-06-09 02:58:49
【问题描述】:
我的问题是关于在固定集群设置中的 flink 作业中为操作员了解并行性的良好选择。假设我们有一个 flink 作业 DAG,其中包含 map 和 reduce 类型的运算符,它们之间有流水线边(没有阻塞边)。 DAG 示例如下:
Scan -> Keyword Search -> Aggregation
假设一个由M 机器组成的固定大小的集群,每个具有C 核心,并且DAG 是在集群上运行的唯一工作流。 Flink 允许用户为各个算子设置并行度。我通常为每个运算符设置M*C 并行度。但从性能角度(例如执行时间)来看,这是最佳选择吗?我们能否利用运营商的特性做出更好的选择?例如,如果我们知道aggregation 更昂贵,我们是否应该只将M*C 并行度分配给aggregation 运算符并减少其他运算符的并行度?这也有望减少背压的机会。
我不是在寻找一个合适的公式来给我“最好的”并行性。我只是在寻找某种可以用来做出决定的直觉/指南/想法。令人惊讶的是,我找不到太多关于这个主题的文献可供阅读。
注意:我知道最近 Flink 中的动态缩放响应模式。但是我的问题是关于一个只运行一个工作流的固定集群,这意味着动态扩展是不相关的。我查看了this 的问题,但没有得到答案。
【问题讨论】:
标签: apache-flink distributed-computing flink-streaming distributed-system