【问题标题】:Flink Statefun concurrent state updateFlink Statefun 并发状态更新
【发布时间】:2020-11-03 22:15:45
【问题描述】:

我正在尝试使用 apache flink 有状态函数来实现消息传递场景。 我的状态之一能够通过提供给 MatchBinder 的两个不同功能进行更新。这两个函数基本上是检查当前状态并相应地更新状态。

  • 如果同时为同一个键调用这两个函数会怎样?
  • 对于调用相同键的有状态函数,是否存在队列机制?
  • 我们能否锁定状态访问/更新以进行顺序访问?

【问题讨论】:

    标签: apache-flink flink-statefun


    【解决方案1】:

    如果同时调用这两个函数会发生什么 同一把钥匙?

    MatchBinder 基本上是一种编写单个 StateFun 函数的便捷方式,该函数通过首先匹配传入消息的类型(或属性)来开始执行。这基本上是一种避免这样编写代码的方法:

    ...
    if (message instanceof A) {
      handleA((A) message);
    } else if (message instanceof B) {
      handleB((B) message);
    }
    ...
    

    因此,实际上,尽管您为每个绑定案例提供“不同”的 Java 函数,但调用的是同一个 StateFun 函数,并且会选择正确的绑定案例。

    是否有用于有状态函数的队列机制调用相同的 钥匙?

    是的,StateFun 函数将按地址顺序调用。当函数应用于特定地址时,不会同时应用该地址的其他消息。这几乎是免费的,这要归功于 Apache Flink 作为实际的运行时。

    我们可以为顺序访问锁定状态访问/更新吗?

    每个地址的状态访问和修改都是原子的和顺序的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多