Apache Flink Stateful Functions 将相同的消息转发给 N 个函数
Apache Flink Stateful Functions forwarding the same message to N functions
我正在尝试将传入消息发送到多个有状态函数,但我无法完全理解该怎么做。为了便于理解,假设我的一个有状态函数获取一些整数并将它们发送到几个远程函数。这些函数将这个整数添加到它们的状态值中,并将其保存为新状态。
当这两个远程功能之一失败时,另一个应该继续以同样的方式工作。
当失败的功能恢复时,它应该处理失败期间无法处理的消息。
我想像下面这样一个接一个地发送,但我认为这行不通
context.send(RemoteFuncType1,someID,someInteger);
context.send(RemoteFuncType2,someID,someInteger);
...
- 如何以容错方式执行此操作?
- 如果可能,它在后台如何工作?
您建议的方法是正确的方法!
StateFun 会以一致的方式将消息传送到远程函数。如果其中一个功能出现短暂停机,StateFun 将重试发送消息,直到:
- 它将成功交付(有回退)
- 将达到重试的最大超时时间。当达到超时时,整个 StateFun 作业将倒带到
以前一致的检查点。
由于 StateFun 正在管理消息传递和函数状态(包括远程),它将确保将一致的状态和消息传递给每个函数。
在您的示例中:一旦恢复,第二个远程函数将接收 someInteger 及其之前的任何状态。
为了更深入地了解检查点在 Flink 中的工作原理以及它如何启用 exactly once 处理,我建议如下:
https://ci.apache.org/projects/flink/flink-docs-stable/internals/stream_checkpointing.html
我正在尝试将传入消息发送到多个有状态函数,但我无法完全理解该怎么做。为了便于理解,假设我的一个有状态函数获取一些整数并将它们发送到几个远程函数。这些函数将这个整数添加到它们的状态值中,并将其保存为新状态。
当这两个远程功能之一失败时,另一个应该继续以同样的方式工作。 当失败的功能恢复时,它应该处理失败期间无法处理的消息。
我想像下面这样一个接一个地发送,但我认为这行不通
context.send(RemoteFuncType1,someID,someInteger);
context.send(RemoteFuncType2,someID,someInteger);
...
- 如何以容错方式执行此操作?
- 如果可能,它在后台如何工作?
您建议的方法是正确的方法!
StateFun 会以一致的方式将消息传送到远程函数。如果其中一个功能出现短暂停机,StateFun 将重试发送消息,直到:
- 它将成功交付(有回退)
- 将达到重试的最大超时时间。当达到超时时,整个 StateFun 作业将倒带到 以前一致的检查点。
由于 StateFun 正在管理消息传递和函数状态(包括远程),它将确保将一致的状态和消息传递给每个函数。 在您的示例中:一旦恢复,第二个远程函数将接收 someInteger 及其之前的任何状态。
为了更深入地了解检查点在 Flink 中的工作原理以及它如何启用 exactly once 处理,我建议如下:
https://ci.apache.org/projects/flink/flink-docs-stable/internals/stream_checkpointing.html