我有一个4节点的独立Flink集群。在每个节点(TM A,TM B,TM C,TM D)上都有一个TaskManager,每个TaskManager都有2个插槽(A1,A2,B1,...,D2)。
作业的来源与并行性一起运行8。 来源中有6个map / flatMap(所有参数均与标准杆2相同)。
在检查流程时,发现所有flatMap操作都使用同一TM的插槽(可以),但是整个工作仅使用2个TM。因此负载非常不平衡。
为什么这是行为?如何平衡负载?
答案 0 :(得分:0)
我假设par 2
表示并行度2。
因此您的作业具有默认的并行度8,但是您正在为flatMap运算符更改此默认并行度。因此,每个flatMap运算符将使用8个可用插槽中的2个。
问题是,为什么您的运营商没有部署到不同的插槽,而是使用相同的插槽。可能的关键是您启用了运算符链接,其中运算符将在同一插槽中使用相同的线程来优化它们。 因此,根据您的图片,flatMap 1可能与flatMap 5链接在一起,flatMap 2则与3、4和6链接在一起。
尝试禁用操作员链接并重新部署应用程序,可能会将您的操作员部署在更多TaskManager中。 如果您想对链接进行细粒度的控制,则可以手动进行操作,或者您可以考虑删除每个运算符的并行性,而保留默认的作业并行性。
答案 1 :(得分:0)
有几个相关因素: