代码之家  ›  专栏  ›  技术社区  ›  Mazen Ezzeddine

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

  •  0
  • Mazen Ezzeddine  · 技术社区  · 4 年前

    m ,上游操作员如何知道机器(任务管理器) m’ 在其上承载下游运算符。在JobManager对作业子/任务(操作符)的初始调度期间,是否在下游/上游操作符之间建立了这样的数据流路径,并且在应用程序生命周期内,这样的数据流路径是固定的?

    一般来说,考虑支持动态消息传递、数据流不是固定的或预定义的Flink有状态函数,并给定一个带有键的函数 k 需要用键向另一个函数发送消息/事件 k’ 你将如何运作 查找函数的地址 k公司 为了传达信息?Flink运行时是否在某些分布式数据结构(如Microsoft Orleans中的DHT)中保留了关键机映射,并且每次调用函数都涉及对此类数据结构的访问?

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

    非常感谢。

    0 回复  |  直到 4 年前
        1
  •  4
  •   David Anderson    4 年前

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

    enter image description here

    路由器变成了与这些源链接在一起的flatmap运营商。

    作为路由器的平面图将输入消息转换为内部事件信封,从而 实际上,只需将消息负载与其目标逻辑地址包装在一起。信封是 所有流经流图的消息的有线数据类型。 有状态函数运行时以函数分派器操作符为中心, 它跨所有模块运行所有加载函数的实例。

    在router flatmap操作符和function dispatcher操作符之间是一个keyBy操作 id 作为关键。这个 身份证件 被送到同一个地方 函数分派运算符的实例。

    收到后,函数调度器从信封中提取目标函数地址,然后加载 信封)。

    这是通过将每个函数调度器与 反馈运算符 所有传出的消息都使用target函数通过另一个网络洗牌 身份证件 作为关键。

    ,在作业图中。有状态函数在其消息传递模式中可以有循环,也可以有循环,并且不限于使用DAG处理数据。

    反馈通道 已检查 ;消息在发生故障时不会丢失。

    Stateful Functions: Polyglot Event-Driven Functions for Stateful Distributed Applications . 上面的数字来自他的谈话。