容错—apache flink有状态函数将同一消息转发给n个函数

ljsrvy3e  于 2021-06-26  发布在  Flink
关注(0)|答案(1)|浏览(456)

我正在尝试将传入消息发送到多个有状态函数,但我无法完全理解如何做。为了便于理解,让我们假设我的一个有状态函数得到一些整数,并将它们发送给两个远程函数。这些函数将这些整数添加到它们的状态值中​​并将其保存为新状态。
当这两个远程功能中的一个失败时,另一个应该继续以相同的方式工作。当失败的函数恢复时,它应该处理在失败期间无法处理的消息。
我想按下面的顺序一个接一个地寄,但我认为行不通

context.send(RemoteFuncType1,someID,someInteger);
context.send(RemoteFuncType2,someID,someInteger);
...

如何以容错方式执行此操作?
如果可能的话,它是如何在后台工作的?

osh3o9ms

osh3o9ms1#

你建议的方法是正确的!
statefun将以一致的方式向远程功能传递消息。如果其中一个函数遇到短暂的停机时间,statefun将重试发送消息,直到:
它将成功地交付它(后退)
将达到重试的最大超时。当达到超时时,整个statefun作业将倒带到以前一致的检查点。
由于statefun管理消息传递和函数的状态(包括远程),它将确保一致的状态和消息将被传递到每个函数。在您的示例中:一旦恢复,第二个远程函数将接收到某个整数,该整数具有它之前的任何状态。
为了更深入地了解检查点在flink中的工作原理以及它如何实现一次处理,我建议如下:
https://ci.apache.org/projects/flink/flink-docs-stable/internals/stream_checkpointing.html

相关问题