Flink 再平衡和链式策略

Posted

技术标签:

【中文标题】Flink 再平衡和链式策略【英文标题】:Flink rebalance and chaining strategy 【发布时间】:2020-04-20 11:06:43 【问题描述】:

背景

我们使用dataStream.rebalance() 在我们的分区上创建相等的负载。但是,我们通常将链接策略设置为HEAD,例如,以允许多线程转换分配。

问题

是在重新平衡推荐的做法之前设置链接策略,还是 Flink 在重新平衡之后自动允许多线程转换分配?

【问题讨论】:

【参考方案1】:

作为用户,您通常从不设置链接策略。仅当您有自定义运算符时才设置它。事实上,我们目前正在弃用操作员级别的链式策略,并且只允许在操作员工厂级别使用它。

默认情况下,所有运算符都是ALWAYS 可链接的。这意味着,只要它们共享同一个槽并与正向通道连接,就会跳过网络/本地通道,并将记录直接交给下一个转换。因此,如果通过任何类型的 shuffle 连接(例如,rebalance)连接,则不能链接任何运算符。

因此,在不更改任何链接策略的情况下,您将获得由任何 shuffle 操作分隔的长管道。

现在,如果您将其更改为 HEAD 以用于直接在 shuffle 操作之后的所有运算符,您实际上将有一个无操作。 Head 表示算子只能是算子链的头部。如果你还改变了洗牌后所有转换的策略,你实际上根本不会得到链。 (从您的问题中,这一点并不完全清楚)

TL;DR 不会更改链接策略,除非您实现自己的运算符。它不会比默认更快。

【讨论】:

以上是关于Flink 再平衡和链式策略的主要内容,如果未能解决你的问题,请参考以下文章

Azure DevOps 中链式分支的分支策略

解析promise链式调用

jQuery链式操作如何实现以及为啥要用链式操作

二叉树链式存储和遍历

链式调用就是promise的优点吗?

线性表的链式存储(C代码实现)