在Flink运营商之间共享状态

时间:2019-02-04 00:00:44

标签: apache-flink flink-streaming

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

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

desired stream diagram

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

    • 然后,我连接流,我希望可以访问在浓缩流中创建的相同状态

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

谢谢。

1 个答案:

答案 0 :(得分:0)

  1. 实际上很难“简单地加载整个状态”,因为您无法控制加载的顺序。通常,您希望在处理任何主流之前先完全加载浓缩数据(请参见FLIP-23)。
  2. 抛开这些,我不会将其视为“状态加载”。基本上,您是在需要的地方(在扩展功能中)缓存扩展数据。
  3. 最后,不,我不知道Flink中一种简单的内置方法来在操作员之间共享状态。显然,您可以使用一些外部键值存储来启用此功能,但是(a)这是额外的基础结构,而(b)它的性能将不那么出色。