Apache Flink:设置并行性的准则?

Jav*_*sVA 5 apache-flink flink-streaming

我正在尝试获取一些简单的规则或准则,以设置操作员或工作并行性的值。在我看来,它应该是一个数字<=可用任务槽的数量?

例如,假设我有2个任务管理器计算机,每个计算机都有4个任务槽。假设没有其他作业在群集上运行,我是否将过滤器和映射之类的操作的并行性设置为8?如果没有,合理的数字是多少?

如果您请求的并行性比任务插槽更多,会发生什么?在上面的示例中,如果将操作的并行度设置为12,会发生什么情况?我假设它会使用尽可能多的可用空间?

另外,您似乎不想将并行性硬编码到源代码中,因为您在提交作业时希望对可用任务槽有一个大概的了解?您应该为所有运算符设置大致相同或不同的值的并行性,什么将指导该决策?

谢谢!

Til*_*ann 5

一般来说,最好不要对并行性进行硬编码,因为通常由操作人员负责决定为您的作业分配多少资源。此外,资源需求通常取决于您的 SLA 和实际工作负载,因此是独立于程序的,应单独处理。

使用Flink 1.5.0,当在 Yarn 或 Mesos 上运行时,您只需要决定作业的并行性,系统将确保它启动足够的 TaskManager 和足够的槽来执行您的作业。这完全是动态发生的,您甚至可以在运行时更改作业的并行性。

如果您使用独立模式,或者您的 Yarn/Mesos 集群没有足够的可用资源/插槽,则作业将失败,并显示“NoResourceAvailableException如果系统无法获取所需的插槽”。