关于Flink上允许优化群集中资源使用的功能(延迟,吞吐量...),即插槽共享,任务链,异步i / o和动态扩展,我想问下面的问题(所有在流处理上下文):
-
在某些情况下,有人会对任务管理器中的插槽数量是否高于cpu核心数感兴趣?
-
在这种情况下,我们是否应该优先在多个插槽上拆分任务管道(禁用插槽共享),而不是增加并行度,以便应用程序跟上传入的数据速率?
-
即使使用上述所有功能,也可能为插槽保留的资源可能高于插槽中所有任务所需的资源量,从而导致我们拥有为插槽保留的资源,但是没被使用?当我们在具有不同延迟(或不同并行性)的应用程序中执行任务时,是否可能出现此类问题?或者甚至当我们在同一个窗口上执行多个聚合(无法使用折叠或缩小进行优化)时?
提前致谢 .
1 回答
通常,建议为每个插槽保留至少一个CPU核心 . 您希望保留更多插槽而非核心的一个原因是您在操作员中执行阻塞操作 . 这样你就可以保持所有核心的繁忙 .
如果您发现应用程序无法跟上传入的数据速率,那么通常最好增加并行性(假设瓶颈不是具有并行性1的运算符,并且您的数据具有足够的键值) .
如果在一个管道中有多个计算密集型运算符(甚至可能是链接的),并且每个插槽的核心数少于这些运算符,那么拆分管道可能是有意义的 . 这样,可以更好地同时进行这些运算符的计算 .