我正在尝试使用apache flink有状态功能来实现消息传递方案。 我的状态之一是可以通过MatchBinder提供的两个不同功能进行更新。这两个功能基本上检查当前状态并相应地更新状态。
答案 0 :(得分:1)
如果同时为这两个函数调用这两个函数,会发生什么情况 相同的键?
MatchBinder基本上是编写单个StateFun函数的便捷方法,该函数通过首先匹配传入消息的类型(或属性)来开始执行。基本上,这是避免编写这样的代码的一种方式:
...
if (message instanceof A) {
handleA((A) message);
} else if (message instanceof B) {
handleB((B) message);
}
...
因此,实际上,尽管您为每个绑定大小写提供“不同”的Java函数,但这是相同的StateFun函数被调用,并且将选择正确的绑定大小写。
是否有针对相同功能的有状态功能的队列机制 钥匙?
是的,将按地址依次调用StateFun函数。当将功能应用于特定地址时,不会同时应用该地址的其他消息。这几乎是免费的,这要感谢Apache Flink作为实际的运行时。
我们可以锁定状态访问/更新以进行顺序访问吗?
每个地址的状态访问和修改都是原子的和顺序的。