我正在尝试将传入的消息发送到多个有状态的函数,但是我无法完全理解该怎么做。为了易于理解,假设我的有状态函数之一获取一些整数并将其发送给几个远程函数。这些函数将此整数添加到其状态值中并将其保存为新状态。
当这两个远程功能之一发生故障时,另一个功能应继续以相同的方式工作。 故障功能恢复后,它应该处理在故障期间无法处理的消息。
我考虑过如下所述将它们一个接一个地发送,但我认为这不可行
context.send(RemoteFuncType1,someID,someInteger);
context.send(RemoteFuncType2,someID,someInteger);
...
答案 0 :(得分:2)
您建议这样做的方法是正确的方法!
StateFun将以一致的方式将消息传递到远程功能。如果其中一个功能的停机时间很短,StateFun将重试发送消息,直到:
由于StateFun正在管理消息传递和功能的状态(包括远程功能),因此它将确保将一致的状态和消息传递给每个功能。 在您的示例中:第二个远程函数一旦恢复就将接收到someInteger,它具有以前的任何状态。
要更深入地了解Fpoint中检查点的工作方式以及它如何在处理后完全启用,我建议以下内容:
https://ci.apache.org/projects/flink/flink-docs-stable/internals/stream_checkpointing.html