【问题标题】:Sharing state among Flink operatorsFlink 算子之间共享状态
【发布时间】:2019-02-04 00:00:43
【问题描述】:

这个问题已经被问到here,但两年过去了,我想知道是否有任何改变。

我有一个用例,我想在两个 Flink 操作符之间共享状态:

  • 流 A 是主流,它不断流动
  • 流 B 只是丰富数据的数据集。它很大(几 GB),因此不适合作为广播流。
  • 流 B 有一个与之关联的运算符(FlatMap,但实际上可以是任何东西),它充当状态加载器并将丰富数据作为列表状态加载到 RocksDB 中。

    • 然后,我连接流,我希望能够访问在扩充流中创建的相同状态。

最后,我知道我可以在使用“co”函数连接流之后简单地加载整个状态。 只是从软件工程的角度来看,将职责分为“状态加载器”类和实际的“数据丰富器”类似乎更清晰,所以我只想知道这是否可能。

谢谢。

【问题讨论】:

    标签: apache-flink flink-streaming


    【解决方案1】:
    1. 实际上很难“简单地加载整个状态”,因为您无法控制加载的顺序。通常,您希望在处理任何主流之前完全加载扩充数据(请参阅FLIP-23)。
    2. 撇开这一点不谈,我不会将其视为“状态加载”。基本上,您将丰富数据缓存在需要的地方(在丰富函数中)。
    3. 最后,不,我不知道 Flink 中有一种简单的内置方式来在操作员之间共享状态。您显然可以使用一些外部键值存储来启用此功能,但 (a) 那是额外的基础架构,并且 (b) 它不会像以前那样高效。

    【讨论】:

      猜你喜欢
      • 2017-02-22
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 2010-11-12
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      相关资源
      最近更新 更多