当前位置: 首页 > 知识库问答 >
问题:

用于消息传递的Flink有状态函数地址解析

朱令
2023-03-14

在Flink数据流中,假设上游运算符托管在机器/任务管理器M上,那么上游运算符如何知道下游运算符托管在其上的机器(任务管理器)M'。是否在JobManager对作业子/任务(操作符)进行初始调度期间,在下游/上游操作符之间建立了这样的数据流路径,并且这样的数据流路径在应用程序生存期内是固定的?

更一般地,考虑Flink状态函数,其中支持动态消息传递,并且数据流不是固定的或预定义的,并且给定一个具有键K的函数,该函数需要向另一个具有键K'的函数发送消息/事件,函数K如何找到函数K'的地址来传递消息?Flink运行时是否在某种分布式数据结构(例如Microsoft Orleans中的DHT)中保持键机映射,并且函数的每次调用都涉及到对这种数据结构的访问?

注意,我来自Spark背景,在那里,给定RDD/批处理模型,作业图任务是连续执行的(在shuffle边界处断开),并且每个shuffle子任务都是由持有该子任务应该拉出/处理的键子集的机器指示的……。

谢谢你。

共有1个答案

景翰音
2023-03-14

即使使用有状态函数,底层Flink作业的拓扑也是在作业启动时固定的。每个有状态函数作业都或多或少地使用一个作业图(入口各不相同,但其余的总是这样):

在这里,您可以看到所有加载的入口都变成了发出输入消息的Flink源操作符,路由器变成了链接到这些源的flatmap操作符

充当路由器的flatmaps将输入消息转换为内部事件包络,该包络实质上只是将消息有效载荷与目标逻辑地址包装在一起。信封是流经流图的所有消息的在线数据类型。有状态函数运行时以函数调度器运算符为中心,该运算符在所有模块中运行所有加载函数的实例。

收到后,函数分派器从信封中提取目标函数地址,加载该函数实例,然后用包装的输入(也在信封中)调用函数。

函数调度程序的不同实例如何相互发送消息?

这是通过将每个函数分派器与一个反馈运算符同地定位来完成的。使用目标函数id作为密钥,所有传出的消息都将通过另一个网络洗牌。

 类似资料:
  • 我想使用谷歌的Firebase为网络构建一个消息应用程序。在这个应用程序中,用户应该向/从其他用户发送和接收消息。我检查了谷歌的Firebase网站,但我迷路了。你能告诉我从哪里开始吗?你能给我看任何与Firebase网络消息相关的教程或类似的东西吗?我欢迎任何建议。谢谢。

  • 我很好奇节俭是否适合我的用例?我正在制作另一个消息传递系统,其中有一个客户端和服务器,但客户端和服务器都会向另一个发送请求消息,并且并非所有消息都是请求,只是通知。 回到10年前,我用基于二进制的手卷编解码器做到了这一点。回到5年前,我使用Google协议缓冲区再次做到了这一点。但我现在听到了更多关于Thrift的信息。 Thrift可以简单地用作编解码器吗,还是它真的是围绕请求/回复模式构建的?

  • 顺便说一下,在使用/而不是发射器时,我遇到了同样的问题。我已经决定给你们举这个例子,因为它很容易理解和再现。

  • 由于内容脚本在网页而不是扩展程序的上下文中运行,因此它们通常需要某种与扩展程序其余部分进行通信的方式。例如,RSS 阅读器扩展程序可以使用内容脚本来检测页面上 RSS 摘要的存在,然后通知后台页面以显示该页面的操作图标。 扩展及其内容脚本之间的通信使用消息传递来实现。任何一方都可以监听从另一端发送的消息,并在同一通道上进行响应。消息可以包含任何有效的 JSON 对象(空,布尔值,数字,字符串,数组

  • ms tcp nodelay 描述: 在信差的 TCP 会话上禁用 nagle 算法。 类型: Boolean 是否必需: No 默认值: true ms initial backoff 描述: 出错时重连的初始等待时间。 类型: Double 是否必需: No 默认值: .2 ms max backoff 描述: 出错重连时等待的最大时间。 类型: Double 是否必需: No 默认值: 15

  • 消息传递 目录 一次简单的请求 h3Name 长时间保持连接 h3Name 扩展之间的消息传递 h3Name 安全策略 h3Name 范例 h3Name API reference Properties propertyName Methods methodName Events eventName Types id For information on how to use experiment