如何使用修改后的运算符位置强制Apache Flink



Apache Flink在JobManagers(Slaves(上的可用空闲插槽上分发其运算符。如文档中所述,可以为执行中包含的每个运算符设置SlotSharingGroup。这意味着,两个操作符可以共享同一个槽,稍后在那里执行。

不幸的是,此选项只允许共享同一组,但不允许将流操作分配给特定插槽。

因此,我的问题是:在Apache Flink中,手动将流媒体运营商分配给特定插槽/工作者的最佳(或至少一种(方法是什么

您可以通过(disableChaining()(禁用链接,并启动一个新的链来通过(startNewChain()(将其与其他链隔离。您可以使用Flink Plan Visualizer来查看您的计划是否有独立的运算符。这些修饰语应用于运算符。示例:

.map(...).startNewChain().slotSharingGroup("exceptional")
// or
.filter(...).startNewChain().slotSharingGroup("default")

为什么你需要隔离它?好在任何链的末尾,flink都会执行一个检查点(如果启用(,并且检查点应该得到确认(持久化/序列化(。否则,系统将回滚它并重新启动进程。为此,Flink需要事先确保有足够的插槽。在您的情况下,有足够的exceptional插槽。否则,整个流将处于非活动状态。因此,你不能告诉flink,对于运算符x,你只需要使用槽x,对于运算符Z,只需要使用Y,因为flink只是一种计算机能力,它为检查点(或直接给下一个运算符(产生中间结果。

这个方向正在进行开发工作。特别是,请参阅FLIP-56:动态插槽分配。我不知道这是否足以满足你的目标,但至少它带来的重构和扩展应该是有帮助的。

有关更多详细信息,请参阅FLINK-14187和相关问题。

相关内容

  • 没有找到相关文章