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和相关问题。