Flink Statefun并发状态更新

时间:2020-07-14 14:30:30

标签: apache-flink flink-statefun

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

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

1 个答案:

答案 0 :(得分:1)

如果同时为这两个函数调用这两个函数,会发生什么情况 相同的键?

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

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

因此,实际上,尽管您为每个绑定大小写提供“不同”的Java函数,但这是相同的StateFun函数被调用,并且将选择正确的绑定大小写。

是否有针对相同功能的有状态功能的队列机制 钥匙?

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

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

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