假设我的Flink应用程序有3个组件: Source、Map和Sink。由于某些原因(例如调用API有很高的延迟),接收器需要非常高的并行性(例如20)。还假设Source和Map占用的CPU/IO非常少。我们知道,最小可用插槽至少应该与应用程序的最大并行性一样大,在本例中为20。部署此应用程序的方法有两种:
所以我的问题是,这个案子的最佳做法是什么?
以前我用过Apache Storm。对于Storm应用程序,我需要指定工人数量(槽)和每个操作符的并行性。但是,可用的插槽至少不需要作为应用程序的最大并行度,因此对于这个应用程序,我可以设置两个工作人员,两个源和映射并行,和20个并行处理Sink,它最终只需要两个槽,每个插槽有一个源,一个地图,和10个Sink螺栓。我认为这样不仅满足了拥有高并行接收器的需要,而且还很好地利用了资源(只有2个Map)。为什么人们想要这样设计Flink并行?还是我的理解错了?
发布于 2020-12-15 15:03:51
有几种选择,以及它们背后的理由:
除了上面的#2之外,这些方案中的一个问题是,在等待缓慢的外部API响应时,您将占用大量资源,这些资源大部分时间都在闲置。另外,在Flink用户函数中执行阻塞/同步i/o也有问题,因为Flink的操作符是单线程的,您可以通过这样做阻止检查点等等。
https://stackoverflow.com/questions/65300028
复制相似问题