Apache flink 如何在ApacheFlink中的并行执行之间共享信息?

Apache flink 如何在ApacheFlink中的并行执行之间共享信息?,apache-flink,Apache Flink,我想知道是否有任何方法可以在运行时在ApacheFlink中的一个操作符内的并行执行之间传输信息?我只需要发一点信息。Flink中的广播变量不起作用,因为它在运行时无法广播。因为Flink还不支持广播流和键控流到同一个函数(称为“侧输入支持”),所以在没有外部共享状态的情况下做您想做的事情变得有点棘手。但我认为这是可能的,通过迭代 例如,对于k-意味着您将作为元组,其中输入值的质心id为null。按点划分到输出的自定义平面图。然后按点重新分区并找到最近的质心。输出,然后按质心id重新分区,并使用

我想知道是否有任何方法可以在运行时在ApacheFlink中的一个操作符内的并行执行之间传输信息?我只需要发一点信息。Flink中的广播变量不起作用,因为它在运行时无法广播。

因为Flink还不支持广播流和键控流到同一个函数(称为“侧输入支持”),所以在没有外部共享状态的情况下做您想做的事情变得有点棘手。但我认为这是可能的,通过迭代

例如,对于k-意味着您将
作为元组,其中输入值的质心id为null。按点划分到输出
的自定义平面图。然后按点重新分区并找到最近的质心。输出
,然后按质心id重新分区,并使用跟踪质心中心点的自定义贴图进行处理。发出更新的
,并将此迭代返回到顶部


因此,第一个自定义平面地图需要以不同的方式处理实点(质心id为空)和质心(质心点,质心id),将质心添加到其状态中,以便可以计算其接收到的任何实点的距离。

您可能需要更具体地了解您的用例,在大多数情况下都不需要这样的东西。但如果你能提供更多细节,也许我们可以找到一种适合你需要的方法。是否可以将这些信息放入共享(内存)数据库并从中读取?@JoshuaDeWald,谢谢。在我的例子中,我想在Flink中实现一个基于流的聚类算法。在我的例子中,操作符将有几个并行执行,每个执行过程都是流数据的一部分,并且可以生成新的质心和簇。然而,新质心的生成并不频繁,其他并行执行应该知道(他们也可能使用这些新质心)。@JoshuaDeWald共享状态可以完美地解决这个问题,但Flink即使在同一个操作符内,并行执行之间也没有共享状态。所以我想知道是否有可能在并行执行之间建立通信。据我所知,这是不可能的,从状态的角度来看,并行操作符是完全独立的。如果你能在更上游的地方生成质心,这样它就可以被发送/广播/任何与并行操作相关的东西,我认为这是更像弗林克的方式。我对所讨论的算法了解不够,不知道这在你的案例中是否有意义。这可能也适用于使用“迭代”流,您将质心反馈到其中。只需一个小注释:Flink 1.5.0将添加对连接键控流和广播流的支持。然而,这一特性与侧输入不同,侧输入更多的是关于对有界流的适当支持。感谢Fabian,我的错误——我读过Aljoscha的电子邮件,内容是“广播输入和广播状态是侧输入的第一步”,意思是它们是一样的,但显然不是这样。