多并行Flink应用中的单并行等分布算子


0

我们有一个flink应用程序,它在一开始有一个map操作符。此操作的输出流使用筛选器路由到多个窗口函数。窗口函数的并行度均为1。我们形成一个窗口函数输出的 union,并将其传递给另一个map函数,然后将其发送到sink。

我们需要两个map函数的并行性来获得环境的并行性。这和预期的一样,窗口函数的并行性也变成了1。

问题是,当我们将环境的并行度设置为大于1时,所有的窗口函数任务最终只转到第一个任务管理器。事件最终只会到达这个任务管理器,并最终导致瓶颈。当并行度大于1时,是否有方法将窗口函数任务分布到多个任务管理器中?执行rebalance()会有帮助吗?

2 答案


0

如果每个任务管理器只有一个槽,并且所有窗口函数任务都在同一个任务管理器中,那么显然所有窗口函数任务都在同一个槽中。

在这种情况下,您可以使用插槽共享组将不同的窗口强制放入不同的插槽中,从而将其分配到不同的任务管理器中。


0

使用Flink 1.9.2/1.10.0或更高版本,可以设置均匀聚集-展开插槽配置布尔值为真。

附加说明-不要在多个流上使用过滤器来创建路由器,而是使用具有多个侧面输出的ProcessFunction,每个目标窗口操作符一个。这样更有效,因为您不需要复制数据N次,然后过滤到一个子集。


我来回答

写文章

提问题

面试题