微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何使用修改后的运算符放置强制 Apache Flink?

Apache Flink 将其操作符分布在 JobManager(从属)上的可用空闲插槽上。如 documentation 中所述,可以为执行中包含的每个运算符设置 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: Dynamic Slot Allocation。我不知道这是否足以满足您的目标,但至少它带来的重构和扩展应该会有所帮助。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。